【问题标题】:ANDROID: How to save JSON data in a file and retrieve it?ANDROID:如何将 JSON 数据保存在文件中并检索它?
【发布时间】:2016-10-21 04:46:36
【问题描述】:

我是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()我想检查文件是否存在,如果存在,从文件中导入数据并显示在屏幕上。

【问题讨论】:

标签: android json file


【解决方案1】:

每个 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();
}

Activity的onCreate,你可以使用做如下操作

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

【讨论】:

    猜你喜欢
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多