1. 程式人生 > >Android 以JSON格式儲存和載入本地檔案

Android 以JSON格式儲存和載入本地檔案

本章主要講把一個物件以json格式儲存在沙盒中,然後又從沙盒中將json資料讀取出來。

每個應用的沙盒目錄都是裝置/data/data目錄的子目錄,且預設以應用包命名。例如,CriminalIntent應用的沙盒目錄全路徑為:/data/data/com.bignerdranch.android.criminalintent。

Q:什麼時候儲存資料合適?

適用於移動應用的一個普遍規則是:儘可能頻繁的儲存資料,尤其
是使用者資料修改行為發生時。既然修改crime記錄後的資料更新都
需要CrimeLab類處理,那麼最靠譜的就是在該類中將資料儲存到
檔案中。

儲存資料到檔案中

public void saveCrimes(ArrayList<Crime> crimes) throws JSONException,
        IOException {
    JSONArray array = new JSONArray();
    for (Crime c : crimes)
        array.put(c.toJSON());

    Writer writer = null;
    try {
        OutputStream out = mContext.openFileOutput(mFilename,
                Context.MODE_PRIVATE);
        writer = new
OutputStreamWriter(out); writer.write(array.toString()); } finally { if (writer != null) { writer.close(); } } }

從檔案中讀取資料

public ArrayList<Crime> loadCrimes() throws IOException, JSONException {
    ArrayList<Crime> crimes = new ArrayList<Crime>();
    BufferedReader reader = null
; try { InputStream in = mContext.openFileInput(mFilename); reader = new BufferedReader(new InputStreamReader(in)); StringBuilder jsonString = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { jsonString.append(line); } JSONArray array = (JSONArray) new JSONTokener(jsonString.toString()) .nextValue(); for (int i = 0; i < array.length(); i++) { crimes.add(new Crime(array.getJSONObject(i))); } } catch (FileNotFoundException e) { } finally { if (reader != null) { reader.close(); } } return crimes; }

context提供的基本檔案或目錄處理方法

context提供的基本檔案或目錄處理方法

原始碼