我正在使用add()将数据追加到ArrayList中,但是我相信游标的逻辑是使我尝试追加的数据实际通过并替换了所有Arraylist数据。

这是我的DBHandler.java中的方法

public ArrayList databaseToStringDate(){

    String dateString = new SimpleDateFormat("yyyy-MM-dd").format(new Date());

    ArrayList<String> dateList = new ArrayList<>();

    SQLiteDatabase db = getWritableDatabase();
    String query = "SELECT * FROM " + KICK_TABLE + " WHERE 1";

    //Cursor points to a location in your results
    Cursor c = db.rawQuery(query, null);
    //Move to the first row in your results
    c.moveToFirst();

    //Position after the last row means the end of the results
    while (!c.isAfterLast()) {
        if (c.getString(c.getColumnIndex("productname")) != null) {
            dateList.add(dateString);
           // dateString += "\n";
        }
        c.moveToNext();
    }

    db.close();
    return dateList;
}


这是我的片段类中显示textView的代码,它工作正常

 ArrayList dbDate = dbHandler.databaseToStringDate();

    String dbDateString = dbDate.toString();

    date.setText( dbDateString);

最佳答案

在代码的开头,您将dateString定义为

String dateString = new SimpleDateFormat("yyyy-MM-dd").format(new Date());


您从数据库中检索行,并为数据库中的每一行调用

dateList.add(dateString);


但是您从来没有重新分配dateString来代表数据库中行中的日期。您需要从数据库中读取date列,然后解析将该String添加到您的ArrayList中。例如:

while (!c.isAfterLast()) {
    if (c.getString(c.getColumnIndex("productname")) != null) {
        dateList.add(c.getString(c.getColumnIndex("date")));
    }
    c.moveToNext();
}


如果没有额外的列查找,您只需将相同的String一遍又一遍地添加到ArrayList中。

08-03 17:09
查看更多