Android 将从网络获取的数据缓存到私有文件

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:运行结果。

原文地址:https://www.cnblogs.com/yshyee/p/3368518.html