从 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 中。
然后我记录了我的Adpter
的getItemCount()
方法的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'。而我必须将这些传递给我将layoutmanager
和adapter
设置为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】:发生这种情况是因为我为 ArrayList
和 Adpter
使用了不同的变量。
只需将ArrayList
和Adpter
作为参数传递给ReadSqliteData()
方法,用于将LayoutManager
和Adpter
设置为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 中的主要内容,如果未能解决你的问题,请参考以下文章