首先,我是Android开发的新手。 我在从数据库中获取数据时遇到了一些问题。每当我尝试获取数据时,光标都是空的。
这是我的代码:
public ArrayList<Word> getWords(){
SQLiteDatabase db = this.getReadableDatabase();
String query = "SELECT * FROM " + TABLE_NAME;
Cursor cursor = db.rawQuery(query, null);
ArrayList<Word> List = new ArrayList<Word>();
if(cursor != null){
cursor.moveToFirst();
while (cursor.moveToNext()){
List.add(new Word(cursor.getString(cursor.getPosition())));
}
}
cursor.close();
db.close();
return List;
}
光标的大小始终为1,但是&#34; List&#34;的大小。变量始终为0.
我没有理解这个问题,谢谢你的帮助。
答案 0 :(得分:1)
您正在移动光标位置两次。只需删除行 cursor.moveToFirst(); moveToNext 方法就足够了,因为它移动到第一次迭代的第一个位置。
答案 1 :(得分:0)
您可以使用此代码:
1 - 如果你需要第一行:
if(cursor != null){
cursor.moveToFirst();
if(cursor.isAfterLast() == false){
List.add(new Word(cursor.getString(cursor.getPosition())));
}
}
2-如果您需要多行:
if(cursor != null){
cursor.moveToFirst();
while (cursor.isAfterLast() == false) {
List.add(new Word(cursor.getString(cursor.getPosition())));
cursor.moveToNext();
}
}
答案 2 :(得分:0)
我检查了一切,但你的建议没有奏效。只是为了确定:我想要获取所有行。
答案 3 :(得分:0)
试试这个
<PropertyGroup>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>
答案 4 :(得分:0)
我刚刚意识到程序没有进入上面给出的代码中的while循环。我认为数据库存在问题。
我使用该查询创建数据库:
private static final String SQL_CREATE_ENTRIES =
"CREATE TABLE " + TABLE_NAME + " (" +
COLUMN_NAME_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COLUMN_NAME_TURKISH + " TEXT, " +
COLUMN_NAME_ENGLISH + " TEXT, " +
COLUMN_NAME_GERMAN + " TEXT, " +
COLUMN_NAME_FRENCH + " TEXT, " +
COLUMN_NAME_ARABIC + " TEXT, " +
COLUMN_NAME_RUSSIAN + " TEXT, " +
COLUMN_NAME_SPANISH + " TEXT, " +
COLUMN_NAME_ITALIAN + " TEXT)";
答案 5 :(得分:0)
我觉得自己像个白痴,因为我忘了在构造函数方法中输入数据库名称,如:
<强>旧强>
super(context, null, null, 1);
立即强>
super(context, "database", null, 1);
感谢您的帮助!