我已经在中解析了JSON数据listview,现在想使其脱机使用。有没有一种方法可以将JSON数据保存在电话上,以便在电话离线时可以查看数据?
listview
有人知道一个例子吗?
编辑现在可以使用:
public class MainActivity extends ListActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); new TheTask().execute(); } class TheTask extends AsyncTask<Void, Void, JSONArray> { InputStream is = null; String result = ""; JSONArray jArray = null; ProgressDialog pd; @Override protected void onPostExecute(JSONArray result) { super.onPostExecute(result); pd.dismiss(); ArrayList<String> list= new ArrayList<String>(); try { for(int i=0;i<result.length();i++) { JSONObject jb = result.getJSONObject(i) ; String name = jb.getString("name")+" "+jb.getString("Art"); list.add(name); } } catch(Exception e) { e.printStackTrace(); } setListAdapter(new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, list)); } @Override protected void onPreExecute() { super.onPreExecute(); pd = ProgressDialog.show(MainActivity.this, "State", "Loading...", true); } @Override protected JSONArray doInBackground(Void... arg0) { ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); try { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("***"); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); is = entity.getContent(); } catch (Exception e) { Log.e("log_tag", "Error in http connection " + e.toString()); } // Convert response to string try { BufferedReader reader = new BufferedReader(new InputStreamReader( is, "iso-8859-1"), 8); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); result = sb.toString(); writeToFile(result); } catch (Exception e) { Log.e("log_tag", "Error converting result " + e.toString()); } try { jArray = new JSONArray(result); } catch (JSONException e) { Log.e("log_tag", "Error parsing data " + e.toString()); } try { jArray = new JSONArray(readFromFile()); } catch (JSONException e) { Log.e("log_tag", "Error parsing data " + e.toString()); } return jArray; } } private void writeToFile(String data) { try { OutputStreamWriter outputStreamWriter = new OutputStreamWriter(openFileOutput("config.txt", Context.MODE_PRIVATE)); outputStreamWriter.write(data); outputStreamWriter.close(); } catch (IOException e) { Log.e("Exception", "File write failed: " + e.toString()); } } private String readFromFile() { String ret = ""; try { InputStream inputStream = openFileInput("config.txt"); if ( inputStream != null ) { InputStreamReader inputStreamReader = new InputStreamReader(inputStream); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String receiveString = ""; StringBuilder stringBuilder = new StringBuilder(); while ( (receiveString = bufferedReader.readLine()) != null ) { stringBuilder.append(receiveString); } inputStream.close(); ret = stringBuilder.toString(); } } catch (FileNotFoundException e) { Log.e("login activity", "File not found: " + e.toString()); } catch (IOException e) { Log.e("login activity", "Can not read file: " + e.toString()); } return ret; } }
您有两种方法。您可以创建一个数据库,然后将所有数据保存在那里,并在需要时将其取回。或者,如果您拥有的数据不是很多,并且您不想处理数据库,那么您可以将json字符串写入存储卡中的文本文件,并在离线时稍后阅读。
对于第二种情况,每次您上线时,都可以从Web服务中检索相同的json并将其覆盖到旧的json中。这样,您可以确保已将最新的json保存到设备中。