在内部存储中保存自定义对象的ArrayList

时间:2013-12-07 21:23:04

标签: java android sqlite listview arraylist

我有一个RowItem的ArrayList,其中RowItem类有以下变量:

public class RowItem
{
   private Bitmap photo;
   private String photoURL ;
   private int online_status;
   private String name;
   private String last_seen;
   private int delete;
   //Getters and Setters ...
}

我想将此ArrayList保存到内部存储中。以下列出了我已尝试过但无法正常工作的内容:

  1. 实施排除策略,如here所示。因为我懒惰而将图像从URL加载到ListView,因此保存了排除的位图。但我仍然遇到如下错误:

     java.lang.RuntimeException: Unable to pause activity {com.awesome.clique/com.awesome.clique.Home}: java.lang.IllegalArgumentException: class android.text.BoringLayout declares multiple JSON fields named mPaint.
    

    如果我使用SharedPreferences(使用gson)或Files保存onPause()或onStop()。

  2. 为RowIem类重写readObject和writeObject的方法。但它仍然继续发出上述错误。

  3. 现在我没有选择了。我现在认为在SQLite数据库中保存ArrayList可能是可行的,但我不知道如何将这个列表保存到SQLite数据库中,因为我不知道SQLite,一眼就看起来很复杂。请帮帮我。

1 个答案:

答案 0 :(得分:1)

我建议您查看ORMLite,它将简化您使用SQLite的方式。

看看我如何在这里实现一个简单的模型:https://github.com/slidese/BabyFeed/blob/master/src/se/slide/babyfeed/model/FeedLog.java

看看(在同一个项目中)你如何使用它,它非常简单。

您的代码看起来像这样:

@DatabaseTable
public class RowItem
{
   @DatabaseField(generatedId = true)
   private int id;

   @DatabaseField
   private Bitmap photo;

   @DatabaseField
   private String photoURL;

   @DatabaseField
   private int online_status;

   @DatabaseField
   private String name;

   @DatabaseField
   private String last_seen;

   @DatabaseField
   private int delete;

   //Getters and Setters ...
}

然后:

DatabaseManager.getInstance().addRowItem(row);

您可以创建这些辅助方法,例如删除可能如下所示:

public void deleteRowItem(RowItem row) {
    try {
        getHelper().getRowDao().delete(row);
    } catch (SQLException e) {
        e.printStackTrace();
    }
}