您的位置:首页 > 理论基础 > 计算机网络

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

2013-10-14 15:52 375 查看
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:运行结果。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐