【问题标题】:How to call method in Activity only once if database holds existing data?如果数据库保存现有数据,如何仅在 Activity 中调用方法一次?
【发布时间】:2025-12-24 02:50:07
【问题描述】:

我制作了一个应用程序,它允许用户将收藏夹添加到 SQLite 数据库,然后将信息加载到收藏夹数组列表中,该数组列表显示在收藏夹活动中。当用户点击“添加到收藏夹”按钮时,执行此功能:

 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
        }
}

这成功地将图像添加到收藏夹数组列表中,并在用户访问收藏夹活动页面时显示它。

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

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

请有人建议我如何修复我的循环,以便在我的应用启动时,仅添加数据库中现有的收藏项,而不会在每次加载活动时再次添加到数组列表中?

【问题讨论】:

    标签: java android sqlite arraylist methods


    【解决方案1】:

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

    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
    }
    

    【讨论】:

      【解决方案2】:

      在调用loadFavourites() 之前清除收藏夹数组列表 或者在loadFavourites()的第一行添加favouritesarraylist.clear

      【讨论】:

      • OMG 在 loadFavourites() 的第一行添加 favouritesarraylist.clear 有效,谢谢!!!!