我收到以下错误:
android.database.CursorIndexOutOfBoundsException:请求索引0, 大小为0。
从这段代码:
C={[1 1;0 0] [-6 -4;-3 7]}
和这个班级 public Lirik getLirik(String id){
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_MUPUH,
new String[] { KEY_ID, JUDUL, KEY_MUPUH },
KEY_ID + "=?",
new String[] {
String.valueOf(id)
},
null,
null,
null);
if (cursor != null && cursor.moveToFirst())
cursor.moveToFirst();
Lirik lirik = new Lirik(cursor.getString(1),
cursor.getString(2));
db.close();
return lirik;
}
:
错误:ViewMupuh
Lirik lirik = db.getLirik(position);
答案 0 :(得分:3)
您的代码中存在多个问题。首先,你不必两次打电话给cursor.moveToFirst()
:
if (cursor != null && cursor.moveToFirst()) // <-- First call
cursor.moveToFirst(); // <-- Second call
此外,即使游标为null或者没有检索到任何数据,您也试图从游标中获取数据:
if (cursor != null && cursor.moveToFirst())
cursor.moveToFirst();
Lirik lirik = new Lirik(cursor.getString(1),
cursor.getString(2)); // <-- cursor can be null here
无论如何,你要打开资源。您永远不会关闭cursor
,如果有任何问题,db
也不会关闭。我建议用这种方式重写getLirik()
函数:
public Lirik getLirik(final String id) {
Lirik lirik = null;
SQLiteDatabase db = null;
Cursor cursor = null;
try {
db = this.getReadableDatabase();
cursor = db.query(TABLE_MUPUH, new String[] { KEY_ID, JUDUL,
KEY_MUPUH }, KEY_ID + "=?", new String[] { id }, null,
null, null);
if (cursor != null && cursor.moveToFirst()) {
lirik = new Lirik(cursor.getString(1), cursor.getString(2));
}
} catch (final Exception e) {
// Do something with the Exception (Log, raise, ...)
} finally {
cursor.close();
db.close();
}
return lirik;
}
如果您这样做,请考虑在致电getLirik()
时您可以获取null,因此,在ViewMupuh.onCreate()
中,您应该检查它以避免进一步的错误:
textJudul = (TextView) findViewById(R.id.judul_details);
textLirik = (TextView) findViewById(R.id.lirikdetails);
DBHelper db = new DBHelper(this);
Lirik lirik = db.getLirik(position);
if (lirik != null) {
textJudul.setText(lirik.getJudul());
textLirik.setText(lirik.getLirik());
}
还要考虑到所有提示都指出数据库中没有与您要查询的ID匹配的记录(可能您的数据库是空的?)
答案 1 :(得分:-1)
我认为这里存在多个问题。第一个问题是游标中没有任何行。第二个问题如下。
if (cursor != null && cursor.moveToFirst())
cursor.moveToFirst();
Lirik lirik = new Lirik(cursor.getString(1),
cursor.getString(2));
db.close();
return lirik;
if语句周围没有花括号。因此,在游标没有行的情况下,它仍在执行Lirik lirik = new Lirik(cursor.getString(1),
cursor.getString(2));
请确保您的数据库包含您需要的信息。