从 SQLite 数据库加载的数据未保存在模型类 ArrayList android 中

Posted

技术标签:

【中文标题】从 SQLite 数据库加载的数据未保存在模型类 ArrayList android 中【英文标题】:data loaded from SQLitE databse is not saving in the model class ArrayList android 【发布时间】:2021-09-04 09:34:15 【问题描述】:

我正在从我的SQLite database 中检索数据。我检查了我的数据是否已成功检索,但这并没有通过记录值保存在我的 Model Class 的 ArrayList 中。

然后我记录了我的AdptergetItemCount() 方法的list. size() 的值为0。所以为什么我的数据没有保存在模型类中。

ReadSqliteData() 方法

public void ReadSqliteData(Context context)
ArrayList<Model> list = new ArrayList<>();
Adpter adpter = new Adpter(list,context);
SQLiteDatabase database = getWritableDatabase();
Cursor cursor = database.rawQuery("Select name, image from orders",null);
while (cursor.moveToNext())
    Model model = new Model();
    model.setImage(cursor.getString(0));            
    model.setName(cursor.getString(1));    
    list.add(model);

adpter.notifyDataSetChanged();
cursor.close();
database.close();

我的适配器类中的这个方法

@Override
    public int getItemCount() 
        Log.d("tag",String.valueOf(list.size())); /// i am getting this value 0
        return list.size();
    

我也尝试过放置构造函数。但这也行不通。

模型.java

如果适配器代码需要下面的注释

【问题讨论】:

【参考方案1】:

试试下面的代码。

 class Adapter extends RecyclerView.Adatper<RecyclerViewAdapter.RecyclerViewHolder>()
 //add new method in adapter class
 Public void dataChange(ArrayList<Model> itemList)
  //update your previous list with the new list
  previousList = itemList;
  notifyDataSetChanged()
  




public void ReadSqliteData(Context context)
ArrayList<Model> list = new ArrayList<>();
Adpter adpter = new Adpter(list,context);
SQLiteDatabase database = getWritableDatabase();
Cursor cursor = database.rawQuery("Select name, image from orders",null);
while (cursor.moveToNext())
Model model = new Model();
model.setImage(cursor.getString(0));            
model.setName(cursor.getString(1));    
list.add(model);

//call adapter dataChange() method from here
adpter.dataChange(list);
cursor.close();
database.close();

【讨论】:

这种方法有什么问题。我以前在使用 Firebase 时总是使用这种方法。 您的适配器在调用 notifyDataSetChanged() 时没有获得最新的项目列表 我在这个方法中创建了一个新的 'ArrayList' 和 'Adapter'。而我必须将这些传递给我将layoutmanageradapter 设置为recyclerview 的活动。那么这种方法是正确的。请检查并支持我的回答。***.com/a/68055662/15622565 通知recyclerview更新数据的问题仍未解决? 您的方法不正确,因为每次您将在数据更改时创建一个新的适配器实例,每次迭代都应该使用相同的实例【参考方案2】:

从适配器类中,创建公共函数来设置新项目

// Adapter Class
public void setItems(List<Model> newItems) 
    this.list = newItems;      <-- Here you need to replace with new items
    notifyDataSetChanged();


public int getItemsCount() 
    return list.size();

来自您的活动adapter.setItems(newItems);

【讨论】:

【参考方案3】:

发生这种情况是因为我为 ArrayListAdpter 使用了不同的变量。 只需将ArrayListAdpter作为参数传递给ReadSqliteData()方法,用于将LayoutManagerAdpter设置为RecyclerView,问题就解决了。,

ReadSqliteData(Context context, ArrayList list,Adpter adpter) //这里的代码

public void ReadSqliteData(Context context, ArrayList<Model> list,Adpter adpter)
SQLiteDatabase database = getWritableDatabase();
Cursor cursor = database.rawQuery("Select name, image from orders",null);
Model model = new Model();
while (cursor.moveToNext())
model.setImage(cursor.getString(0));            
model.setName(cursor.getString(1));    
list.add(model);

adpter.notifyDataSetChanged();
cursor.close();
database.close();

注意:- 只有我作为参数传递的`列表和适配器用于将布局管理器和适配器设置为我的 Activity 类中的回收器视图

【讨论】:

以上是关于从 SQLite 数据库加载的数据未保存在模型类 ArrayList android 中的主要内容,如果未能解决你的问题,请参考以下文章

从模型形式 Django 保存数据

数据未从 SQLite 加载到 Listview

如何从API加载图像并将其保存到sqlite数据库中?

将图像保存到数据库并从服务器加载

如何将数据从 listview 单选按钮保存到 SQLite?

Flutter应用打开时如何从sqlite数据库加载初始状态数据