如果数据库保存现有数据,如何只在Activity中调用一次方法?

问题描述 投票:1回答:2

我创建了一个应用程序,允许用户将收藏夹添加到SQLite数据库,然后将数据加载到收藏夹arraylist中,该收藏夹显示在收藏夹活动中。当用户单击“添加到收藏夹按钮”时,将执行以下功能:

 public void loadFavourites() {

    SQLiteDatabase db = dbHelper.getReadableDatabase();     //Get the database from which to read values

    //Get columns and create a cursor database query
    String[] columns = {"favouriteId", "title", "owner", "url_m", "ownerPic", "description", "dateTaken"};
    Cursor cursor = db.query("favourites", columns, null, null, null, null, "favouriteId");

    Log.d("FavouritesDB", "" + cursor.getCount());      //Displays cursor count in the logcat

    cursor.moveToFirst();

        while (!cursor.isAfterLast()) {

            favID = cursor.getInt(0);
            title = cursor.getString(1);
            owner = cursor.getString(2);
            url_m = cursor.getString(3);
            ownerPic = cursor.getString(4);
            description = cursor.getString(5);
            date = cursor.getString(6);

            ImageInfo favourite = new ImageInfo();

            favourite.dateTaken = date;
            favourite.description = description;
            favourite.ownerPic = ownerPic;
            favourite.url_m = url_m;
            favourite.owner = owner;
            favourite.title = title;
            NetworkMgr.getInstance(this).favouritesImageList.add(favourite);

            cursor.moveToNext();        // Move to next entry
        }
}

这会成功将图像添加到收藏夹arraylist,并在用户访问收藏夹活动页面时显示该图像。

但是,每次关闭并重新打开应用程序时,收藏夹活动为空,并且不显示已添加到数据库的收藏夹,因为尚未调用loadFavourites方法。

但是,如果我在收藏夹活动onCreate()中调用loadFavourites方法,则每次加载页面时,数据库中的收藏夹都会再次添加到arraylist中,因此这会创建每个收藏项的重复项。

请有人建议我如何修复我的循环,这样当我的应用程序启动时,只会添加数据库中现有的最喜欢的项目,并且每次加载活动时都不会再添加到arraylist中?

java android sqlite arraylist methods
2个回答
1
投票

在调用loadFavourites()之前清除收藏夹arraylist或在favouritesarraylist.clear的第一行添加loadFavourites()


0
投票

当你的应用程序启动时,你需要检查你的数据库是否包含项目,如果没有添加。调整以下代码为您的应用程序

SQLiteDatabase db = table.getWritableDatabase();
String count = "SELECT count(*) FROM table";
Cursor mcursor = db.rawQuery(count, null);
mcursor.moveToFirst();
int icount = mcursor.getInt(0);
if(icount>0){
return; 
} else {
//populate table
}
© www.soinside.com 2019 - 2024. All rights reserved.