新手--網路訪問的json資料儲存在本地資料夾, 離線使用
阿新 • • 發佈:2019-01-29
這裡寫了一個Demo, 因為看之前的同事寫的程式碼, 在MainActivity中太多,因此抽出了一個專門處理下載的util
具體程式碼如下(因為我寫的很多變數需要在其他類中訪問,這裡直接使用 public static 來定義的,減少麻煩, 此外,因為我是用的是webservice來獲取伺服器資料,因此還刪除了我的一些其他的內容,免得程式碼看起來太雜,雖然只多了十幾行)
這裡因為刪除了一些內容,可能會有些錯誤導包之類的,大家可以按照自己的需要修改! 程式碼中的json資料並沒寫,需要自己下載才能正常執行顯示.
package com.ontime.netdemo.activity;
importimport android.content.Context;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.widget.TextView;import com.google.gson.Gson;import com.ontime.netdemo.R;import com.ontime.netdemo.bean.JsonResult;import com.ontime.netdemo.utils.DownLoadUtil;importorg.ksoap2.SoapEnvelope;
package com.ontime.netdemo.utils; import android.content.Context; import android.util.Log; import android.widget.Toast; import com.ontime.netdemo.activity.MainActivity; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; public class DownLoadUtil { public static String jsonData; //從網路獲取到的json字串,這裡我就不寫獲取過程了 private static BufferedWriter bw = null; private static BufferedReader br = null; private static File cacheFile; //存在本地的資料夾 //將json資料儲存本地資料夾中 public static void storeJsonData(Context context, String jsonData) { try { cacheFile = new File(context.getFilesDir(), "jsonData"); bw = new BufferedWriter(new FileWriter(cacheFile)); bw.newLine(); bw.write(jsonData); Log.e("storeJson", "儲存資料到本地資料夾中:" + cacheFile); bw.close(); } catch (Exception e) { e.printStackTrace(); } finally { bw = null; } } //從本地載入資料 public static String loadJsonDatafromLocal(Context context) { cacheFile = new File(context.getFilesDir(), "jsonData"); StringBuffer stringBuffer = new StringBuffer(); if (cacheFile.exists()) { try { br = new BufferedReader(new FileReader(cacheFile)); while (br.ready()) { stringBuffer.append(br.readLine().trim().toString()); } br.close(); Log.d("loadJsonDatafromLocal", stringBuffer.toString()); return stringBuffer.toString(); } catch (Exception e) { e.printStackTrace(); } } else { Toast.makeText(MyApplication.getContext(),"讀取的檔案不存在",Toast.LENGTH_SHORT).show(); } return null; } public static void downloadFromNet() { new Thread(new Runnable() { @Override public void run() { try { //這裡是從網路獲取json資料的 //呼叫下載資料的方法,將json字串作為實參 DownLoadUtil.storeJsonData(MyApplication.getContext(), jsonData); } catch (Exception e) { e.printStackTrace(); Log.d("Exception", e.toString()); } } }).start(); } }
xml檔案如下,為了簡單,demo中只寫了一個可以滑動的 textview, 將本地資料夾中的資料顯示
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.ontime.netdemo.activity.MainActivity" > <ScrollView android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/tv" android:textSize="20sp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </ScrollView> </RelativeLayout>