ANDROID:从文件到类对象反序列化json字符串

时间:2016-10-24 01:03:40

标签: java android json file deserialization

我试图找出如何将我的待办事项列表保存在文件中,然后在重新打开应用程序时获取它。到目前为止,我的条目保存为正确的文件字符串,但我不知道如何让它们从字符串中退出并显示在屏幕上。我想我必须对它进行反序列化,但我不知道它是如何工作的,并且非常感谢一些帮助。

这是我的代码示例:

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是否已完成

2 个答案:

答案 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);