如何从文件读取/写入对象的Arraylists的ArrayList?

时间:2014-08-24 04:23:30

标签: java android arraylist

我有一个自定义对象(AppDetails),可以成对保存字符串值(TitleDetails)。 我已经创建了这个对象的ArrayList,然后是另一个ArrayList的对象。

ArrayList<ArrayList<AppDetails>> appBox;

protected class AppDetails {
    protected String DetailTitle;
    protected String DetailDesc;

    public AppDetails() {
        DetailTitle = "";
        DetailDesc = "";
    }

    public void setDetailTitle(String s) {
        DetailTitle = s;
    }

    public void setDetailDesc(String s) {
        DetailDesc = s;
    }

    public String getDetailTitle() {
        return DetailTitle;
    }

    public String getDetailDesc() {
            return DetailDesc;
    }

}

将此保存到Android内部存储空间的最佳方法是什么? 我希望能够检索此appBox并在应用启动时加载它,并在每次创建新的ArrayList AppDetails时将其保存到文件中。

2 个答案:

答案 0 :(得分:1)

您可以将数据序列化为xml并使用首选项API保存此类xml。请参阅preference API official page

简而言之,以下代码示例:

sPref = getPreferences(MODE_PRIVATE); //MODE_PRIVATE is a constant means that saved data will be accesed via current app only
Editor ed = sPref.edit(); //Editor for writing data
ed.putString(SAVED_TEXT, stringToWrite); //Prepare the string to save. SAVED_TEXT is a key for xml data chunk that will be saved
ed.commit(); //Save data

对于您的具体示例,可以执行以下操作:

sPref = getPreferences(MODE_PRIVATE); 
Editor ed = sPref.edit();
for(List<AppDetails> lst : appBox){
    for(AppDetails appDetails : lst){
        ed.putString(appDetails.DetailTitle, appDetails.DetailText);
    }
}
ed.commit();

答案 1 :(得分:0)

这可以通过不同方式实现。 考虑到数组不应该很大(数十个对象甚至数百个),您可以将它们作为SharedPreferences插入。为了让您的生活更轻松,我建议在存储到SharedPreferences之前使用Android中的GSON库将主数组解析为JSON字符串。 另一种方法是使用SQLite,因此使用数据库。您可以按如下方式设计1个表:

Id  |  MainArrayIndex   |  Title  |  Description
 1  |        0          | title1  | desc
 2  |        1          | title2  | desc
 3  |        2          | title3  | desc           
 4  |        0          | title4  | desc

甚至可以设计2个表,一个用于将索引保存到主数组(因此可以减小数据大小),另一个用于存储数据本身。