列表返回方法返回一个空列表(虽然列表被填充)

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

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

我的查询方法:

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

日志:

E /光标:12

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

E /查询返回列表:[对象,对象,对象...]

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

日志:

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

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


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

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

日志:

E / Returnee:sh

E / earthquakesByDate:[]


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

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

java android list sqlite object
1个回答
1
投票

这一行:

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.