ANDROID:如何将JSON数据保存在文件中并检索它?

时间:2016-10-21 04:46:37

标签: android json file

我是android的新手,所以请帮助我。我正在尝试将我的ToDoList保存在文件中,以便下次打开它时,所有项目都会重新加载

这是我到目前为止的代码,

MainActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
gson = new Gson();
    try {
        BufferedReader br = new BufferedReader(new FileReader("storage.json"));
        Entry e = gson.fromJson(br, Entry.class);
        Log.d("reading", e.toString());
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }}

@Override
protected void onStop() {
    super.onStop();
    json = gson.toJson(mEntries);
    Log.d("jsondata", json);
    try {
        file1 = new FileWriter("storage.json");
        file1.write(json);
        file1.flush();
        file1.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

Entry.java

public class Entry {
String S;
boolean b;

public Entry(String S, boolean b) {
    this.S = S;
    this.b = b;
}

public String getS() {
    return S;
}

public void setS(String S) {
    this.S = S;
}

public void setB(boolean b) {
    this.b = b;
}

public boolean isB() {
    return b;
}

}

我如何从这里开始?在onCreate()我想检查文件是否存在,如果是,则从文件导入数据并在屏幕上显示。

1 个答案:

答案 0 :(得分:8)

每个Android应用程序都有自己的内部存储空间,只有应用程序可以访问,您可以从那里读取或写入。

在这种情况下,您首先要在创建此文件之前检查是否存在此文件。

  private String read(Context context, String fileName) {
    try {
        FileInputStream fis = context.openFileInput(fileName);
        InputStreamReader isr = new InputStreamReader(fis);
        BufferedReader bufferedReader = new BufferedReader(isr);
        StringBuilder sb = new StringBuilder();
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            sb.append(line);
        }
        return sb.toString();
    } catch (FileNotFoundException fileNotFound) {
        return null;
    } catch (IOException ioException) {
        return null;
    }
}

private boolean create(Context context, String fileName, String jsonString){
    String FILENAME = "storage.json";
    try {
        FileOutputStream fos = context.openFileOutput(fileName,Context.MODE_PRIVATE);
        if (jsonString != null) {
            fos.write(jsonString.getBytes());
        }
        fos.close();
        return true;
    } catch (FileNotFoundException fileNotFound) {
        return false;
    } catch (IOException ioException) {
        return false;
    }

}

public boolean isFilePresent(Context context, String fileName) {
    String path = context.getFilesDir().getAbsolutePath() + "/" + fileName;
    File file = new File(path);
    return file.exists();
}

onCreate of Activity,您可以使用以下操作

boolean isFilePresent = isFilePresent(getActivity(), "storage.json");
if(isFilePresent) {
   String jsonString = read(getActivity(), "storage.json");
   //do the json parsing here and do the rest of functionality of app
} else {
   boolean isFileCreated = create(getActivity, "storage.json", "{}");
   if(isFileCreated) {
     //proceed with storing the first todo  or show ui
   } else {
     //show error or try again.
   }
}

参考https://developer.android.com/guide/topics/data/data-storage.html#filesInternal