如何在光标迭代器中将值分配为阵列列表项目



我试图将一个变量分配给光标内的一个阵列列表,但它总是返回我的最后一个值。这是下面的代码。

从db

获取值
 public ArrayList<Bean> getPendingData(String s) {
    SQLiteDatabase db = getWritableDatabase();
    String[] columns = {name};
    String[] selectionArgs = {s};
    Cursor cursor = db.query(TABLE_NAME, columns, " pending= ? ", selectionArgs, null, null, null, null);
    cursor.moveToFirst();       
    ArrayList<Bean> pending = new ArrayList<>();
    String index0 = null;
    Bean bean;
    bean = new Bean();
    while(!cursor.isAfterLast()) {
        index0 = cursor.getString(cursor.getColumnIndex(name));
        bean.setQuestion(index0);
        pending.add(bean);
        cursor.moveToNext();
    }
    cursor.close();
    return pending;
}

bean.java

public class Bean {
public static int id; // ans
public static String score;
public static String logo;
public static String image;
public static String getQuestion() {
    return question;
}
public static void setQuestion(String question) {
    Bean.question = question;
}
public static String question;
public static String description;
public static String option_three;
public static String OptionFour;

}

您应该在while block中初始化豆子:

while(!cursor.isAfterLast()) {
    Bean bean = new Bean();
    index0 = cursor.getString(cursor.getColumnIndex(name));
    bean.setQuestion(index0);
    pending.add(bean);
    cursor.moveToNext();
}

原因是Java使用参考使用对象,因此您始终将相同的对象添加到数组的"待处理"中,但是在遵循迭代时,您正在更改此对象的值,因此您最终拥有的值最后的迭代。

cursor.isAfterLast()在光标处于最后一行位置时返回true。添加 !(不)在不在光标末尾的性能。

因此, while(!cursor.isAfterLast()){}的意思是循环会遍历光标的最后记录。

使用此方法获取从光标返回的所有行。

if (cursor != null) {
        if (cursor.getCount() > 0) {
            if (cursor.moveToFirst()) {
                homeClassesArrayList = new ArrayList<>();
                do {
                   // fetching data
                } while (cursor.moveToNext());
            }
        }
}

最新更新