gpt4 book ai didi

java - 列表返回方法返回一个空列表(尽管列表已填充)

转载 作者:行者123 更新时间:2023-12-02 10:03:17 26 4
gpt4 key购买 nike

我正在开发一个 Android 应用程序,它使用 SQLite 数据库将数据加载到列表中并显示它。我有一个 DatabaseHelper 类,用于处理数据库的 CRUD 方法。我试图查找给定日期的特定结果,但是,尽管我的查询返回预期结果并填充要返回的列表,但我无法在我的主要 Activity 中返回此列表。

我的查询方法:

public List<Earthquake>getListByDate(LocalDate dateInput){

SQLiteDatabase db = this.getWritableDatabase();
Cursor data = db.rawQuery("SELECT * FROM " + TABLE_NAME + " WHERE " + PUB_DATE + " = " + "'"+dateInput+"'", null);

Log.e("Cursor", ""+data.getColumnCount());
Log.e("QueryReturnList", ""+QueryReturnList(data));

return QueryReturnList(data);
}

Log:

E/Cursor: 12

E/returnList: [object, object, object...]

E/QueryReturnList: [object, object, object...]



QueryReturnList:(此方法根据输入光标构建对象列表)

    private List<Earthquake>QueryReturnList(Cursor data){

List<Earthquake>returnList = new ArrayList<>();

int titleIndex = data.getColumnIndex(TITLE_COL),
descIndex = data.getColumnIndex(DESC_COL),
//... ;

while(data.moveToNext()){
Earthquake e = new Earthquake(
data.getString(titleIndex),
data.getString(descIndex),
//... ;
);
returnList.add(e);
}
Log.e("returnList",""+returnList);
return returnList;
}

Log:

E/returnList: [object, object, object...]



当我记录这些结果时,它们在 DatabaseHelper 中按预期工作。找到正确的结果,QueryReturnList返回预期的列表对象。

<小时/>

但是,当我从主要 Activity 中调用此列表并将其设置为新列表时,当我记录(或调试)它时,它似乎是空的。

List<Earthquake>earthquakes = mDatabaseHelper.getListByDate(currentDateSelection);
Log.e("earthquakesByDate", ""+earthquakes);

Log:

E/returnList: []

E/earthquakesByDate: []

<小时/>

为什么当它确实返回并最初记录填充列表(在我的 DatabaseHelper 中)时,我会返回一个空列表?

注意:在以意外顺序运行时,似乎会多次记录“returnList”和“QueryReturnList”。这些方法是否没有时间获取所有数据并返回?

最佳答案

这一行:

Log.e("QueryReturnList", ""+QueryReturnList(data));

调用QueryReturnList(data),因此完成后,游标将被迭代,因为:

while(data.moveToNext())

光标指针位于最后一行之后。
然后这个:

return QueryReturnList(data);

再次调用QueryReturnList(data),当到达此位置时:

while(data.moveToNext())

它跳过循环,因为 moveToNext() 返回 false
所以最好删除这一行:

Log.e("QueryReturnList", ""+QueryReturnList(data));

或者像这样重写getListByDate():

public List<Earthquake>getListByDate(LocalDate dateInput){
SQLiteDatabase db = this.getWritableDatabase();
Cursor data = db.rawQuery("SELECT * FROM " + TABLE_NAME + " WHERE " + PUB_DATE + " = " + "'"+dateInput+"'", null);
Log.e("Cursor", ""+data.getColumnCount());
List<Earthquake> list = QueryReturnList(data);
Log.e("QueryReturnList", ""+list);
return list;
}

关于java - 列表返回方法返回一个空列表(尽管列表已填充),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55479827/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com