试图保存自定义Android对象数组

时间:2013-09-21 20:51:01

标签: java android

所以我正在创建一个记事本应用程序,记录输入的日期,主题和正文文本字段。当我点击我的帖子按钮时,一切都在我的ListView中正确显示,但是当我关闭应用程序并重新打开它时,只有日期保持不变,其他两个值为NULL。下面是我正在使用的代码。

public class LogList implements Serializable {
private String logDate;
private String logBody;
private String logSubject;

public LogList(String date, String LogBody, String LogSubject){
    super();
    this.logDate = date;
    this.logBody = logBody;
    this.logSubject = logSubject;
}

回到我的主类,我有我的方法,应该将三个值保存到ArrayList lts。

private void saveInFile(String subject_text, String date, String body_text ){
    LogList lt = new LogList(date, subject_text, body_text);

    lts.add(lt);

    saveAllLogs();
}

现在,如果我更改新LogList中值的顺序,则在关闭应用程序并重新打开它之后,只会正确显示第一个值。以下是我的saveAllLogs方法和我的loadFromFile方法。

private ArrayList<String> loadFromFile(){
    ArrayList<String> logs = new ArrayList<String>();
    try {
        FileInputStream fis = openFileInput(FILENAME);
        ObjectInputStream ois = new ObjectInputStream(fis);
        while (true) {
            LogList lt = (LogList) ois.readObject();
            logs.add(lt.toString());
            lts.add(lt);
        }
    } 
    catch (FileNotFoundException e) { e.printStackTrace(); }
    catch (IOException e) { e.printStackTrace(); }
    catch (ClassNotFoundException e) { e.printStackTrace(); }
    return logs;
}

private void saveAllLogs() {
    try {
        FileOutputStream fos = openFileOutput(FILENAME, 0);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        for (LogList lti : lts) {
            oos.writeObject(lti);
        }
        fos.close();
    }
    catch (FileNotFoundException e) { e.printStackTrace(); }
    catch (IOException e) { e.printStackTrace(); }
}

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

首先,

public LogList(String date, String LogBody, String LogSubject){
    super();
    this.logDate = date;
    this.logBody = logBody;
    this.logSubject = logSubject;
}

似乎错了。由于您有大写的参数名称,但您使用小写名称设置成员。

你的意思是:

public LogList(String date, String logBody, String logSubject){
    super();
    this.logDate = date;
    this.logBody = logBody;
    this.logSubject = logSubject;
}

编辑:琐碎的事情,不会影响您的代码:您不需要在构造函数中调用super(),因为您没有扩展任何类。