1:activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/btn_get_titles" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Get Titles"/> <ListView android:id="@+id/lv_show" android:layout_below="@id/btn_get_titles" android:layout_width="match_parent" android:layout_height="wrap_content"/> </RelativeLayout>
2:MainActivity.java
public class MainActivity extends Activity implements OnClickListener { private Button btnGetTitles=null; private ListView lvShow=null; private List<String> titleList=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initUI(); btnGetTitles.setOnClickListener(this); } private void initUI(){ btnGetTitles=(Button)findViewById(R.id.btn_get_titles); lvShow=(ListView)findViewById(R.id.lv_show); } @Override public void onClick(View arg0) { new Thread(new GetTitlesThread()).start(); } Handler getTitlesHandler=new Handler(){ public void handleMessage(Message msg){ if(msg.what==100){ ArrayAdapter<String> adapter=new ArrayAdapter<String>( MainActivity.this, android.R.layout.simple_list_item_1, titleList); lvShow.setAdapter(adapter); } } }; class GetTitlesThread implements Runnable{ @Override public void run() { //1:判断缓存文件是否存在。/data/data/com.yan.example/jsontest/files/titles.txt String path=getFilesDir().getPath()+"//" ; File file=new File(path+"titles.txt"); if(file.exists()){ //2:如果缓存文件存在,就从文件取数据。 readFile("titles.txt"); getTitlesHandler.obtainMessage(100).sendToTarget(); }else{ //3:如果缓存文件不存在,就从网络取数据 ,然后将数据保存到缓存文件。 String url="http://www.zhihuiqd.com/wsht/server/selectTitle2json.php"; String res=getStringFromeNet(url); saveFile("titles.txt",res);//////将内容缓存起来 try{ JSONArray json=new JSONArray(res); int len=json.length(); String title=""; titleList=new ArrayList<String>(); for(int i=0;i<len;i++){ JSONObject temp=(JSONObject)json.get(i); title=temp.getString("title"); titleList.add(title); } }catch(Exception e){ e.printStackTrace(); } getTitlesHandler.obtainMessage(100).sendToTarget(); } } } //保存文件 private void saveFile(String filename,String str){ try{ FileOutputStream fos=openFileOutput(filename,Activity.MODE_PRIVATE); byte[]bytes=str.getBytes(); fos.write(bytes); fos.flush(); fos.close(); }catch(Exception e){ e.printStackTrace(); } } //读取文件 private void readFile(String filename){ String res=""; try{ FileInputStream fis=openFileInput(filename); int length=fis.available(); byte[]buffer=new byte[length]; fis.read(buffer); res=EncodingUtils.getString(buffer, "UTF-8"); fis.close(); JSONArray json=new JSONArray(res); int len=json.length(); String title=""; titleList=new ArrayList<String>(); for(int i=0;i<len;i++){ JSONObject temp=(JSONObject)json.get(i); title=temp.getString("title"); titleList.add(title); } }catch(Exception e){ e.printStackTrace(); } } //从网络服务端取数据 private String getStringFromeNet(String url){ StringBuilder builder=new StringBuilder(); HttpClient client=new DefaultHttpClient(); HttpGet get=new HttpGet(url); try{ HttpResponse response=client.execute(get); if(response.getStatusLine().getStatusCode()==200){ BufferedReader reader=new BufferedReader( new InputStreamReader(response.getEntity().getContent())); for(String s=reader.readLine();s!=null;s=reader.readLine()){ builder.append(s); } } }catch(Exception e){ e.printStackTrace(); } return builder.toString(); } }
3:运行结果。