我试图将一个变量分配给光标内的一个阵列列表,但它总是返回我的最后一个值。这是下面的代码。
从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());
}
}
}