我试图找出如何将我的待办事项列表保存在文件中,然后在重新打开应用程序时获取它。到目前为止,我的条目保存为正确的文件字符串,但我不知道如何让它们从字符串中退出并显示在屏幕上。我想我必须对它进行反序列化,但我不知道它是如何工作的,并且非常感谢一些帮助。
这是我的代码示例:
MainActivity.java
public class MainActivity extends AppCompatActivity {
ArrayList<Entry> mEntries;
String json;
Gson gson;
File dir, saveLocation;
FileWriter file1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gson = new Gson();
try {
BufferedReader br = new BufferedReader(new FileReader(new File(dir,"storage.json")));
Entry e = gson.fromJson(br, Entry.class);
//I'm stuck here, Don't know how to proceed
} catch (FileNotFoundException e) {
e.printStackTrace();
}
@Override
protected void onStop() {
super.onStop();
json = gson.toJson(mEntries);
Log.d("jsondata", json);
try {
dir = getFilesDir();
saveLocation = new File(dir,"storage.json");
file1 = new FileWriter(saveLocation);
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;
}
//Getter and Setter methods
保存在文件中的json示例:
[{&#34; S&#34;:&#34;你好&#34;,&#34; b&#34;:false},{&#34; S&#34;:&#34;任务1&#34;&#34; b&#34;:真},{&#34; S&#34;:&#34;任务2&#34;&#34; b&#34;:假}]
//这里是S要完成的任务,b是否已完成
答案 0 :(得分:0)
您的代码是正确的。
Entry e = gson.fromJson(br, Entry.class);
这行代码已经反序列化了字符串。
答案 1 :(得分:0)
由于您的文件包含Json数组,因此您应该将其解析为Entry
的数组而不是Entry
的单个实例,例如:
BufferedReader br = new BufferedReader(new FileReader(new File(dir,"storage.json")));
Entry[] entries = gson.fromJson(br, Entry[].class);