我正在尝试将一个变量分配给游标中的ArrayList项,但它总是返回最后一个值。这是下面的代码。
从数据库获取价值
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;
}
答案 0 :(得分:0)
你应该在while块中初始化你的bean:
while(!cursor.isAfterLast()) {
Bean bean = new Bean();
index0 = cursor.getString(cursor.getColumnIndex(name));
bean.setQuestion(index0);
pending.add(bean);
cursor.moveToNext();
}
原因是Java通过引用使用对象,因此您始终将相同的对象添加到数组&#34; pending&#34;,但是在后续迭代中您需要更改此值对象,所以最后你得到最后一次迭代的值。
答案 1 :(得分:0)
cursor.isAfterLast()
返回true
。添加!
(不)意味着执行直到它不在光标的末尾。
所以while(!cursor.isAfterLast()){}
表示while循环将遍历到光标的最后一条记录。
使用此方法获取从游标返回的所有行。
if (cursor != null) {
if (cursor.getCount() > 0) {
if (cursor.moveToFirst()) {
homeClassesArrayList = new ArrayList<>();
do {
// fetching data
} while (cursor.moveToNext());
}
}
}