Android 以JSON格式存储和加载本地文件

来源:互联网 发布:美工刀片厚 编辑:程序博客网 时间:2024/06/08 06:16

本章主要讲把一个对象以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提供的基本文件或目录处理方法

源代码

点击查看代码

0 0