Android 以JSON格式儲存和載入本地檔案
阿新 • • 發佈:2018-12-31
本章主要講把一個物件以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;
}