simpleCursorAdapter 无法显示光标
simpleCursorAdapter cannot display cursor
我想从数据库中检索数据。在我的 DBAdapter 中,我使用 fetchAllBooks
方法获取游标:
public Cursor fetchAllBooks()
{
String selectQuery = "SELECT " + TABLE_TITLE + "." + KEY_TITLE_ID + " As _id, "
+ KEY_TITLE + ", " + KEY_PRICE + ", " + KEY_ISBN
+", GROUP_CONCAT(" + KEY_AUTHOR + ", ', ') AS authors"
+ " FROM " + TABLE_TITLE + " JOIN " + TABLE_AUTHOR
+ " USING (" + KEY_TITLE_ID + ")"
+ " GROUP BY " + KEY_TITLE_ID;
Cursor c = db.rawQuery(selectQuery, null);
return c;
}
在主要的 activity 中,我使用 fillData
方法来填充 ListView:
private void fillData() {
Cursor c = db.fetchAllBooks();
startManagingCursor(c);
Log.d("count", c.getCount() + "");// could display the number of book. such as: count: 2; --- means cursor have 2 row(books)
if(c.moveToFirst()) {
do {
Log.d("title", BookContract.getTitle(c)); // could display the title of each book;
}while(c.moveToNext());
}
String[] from = new String[] {BookContract.KEY_TITLE, BookContract.KEY_AUTHORS};
int[] to = new int[] { R.id.cart_row_title, R.id.cart_row_author};
adapter = new SimpleCursorAdapter(this, R.layout.cart, c, from, to, 0);
setListAdapter(adapter);
}
如你所见,LogCat可以显示光标的内容。这意味着我成功检索了光标。但是,listView 无法显示书名和作者。我的代码中没有使用任何 db.close()
或 cursor.close()
。
cart_row.xml
表示列表中的每个行项目 view.And cart.xml
包含列表视图:
提前致谢。
我设法回答了我自己的问题。有点好笑...
请多多注意这句话:
the cart_row.xml
which represent each row item in the list view. And the cart.xml
which contain a list view:
simpleCursorAdapter 需要 cart_row.xml
而不是 cart.xml
。所以将 simpleCursorAdapter 更改为:
adapter = new SimpleCursorAdapter(this, R.layout.cart_row, c, from, to, 0);
我想从数据库中检索数据。在我的 DBAdapter 中,我使用 fetchAllBooks
方法获取游标:
public Cursor fetchAllBooks()
{
String selectQuery = "SELECT " + TABLE_TITLE + "." + KEY_TITLE_ID + " As _id, "
+ KEY_TITLE + ", " + KEY_PRICE + ", " + KEY_ISBN
+", GROUP_CONCAT(" + KEY_AUTHOR + ", ', ') AS authors"
+ " FROM " + TABLE_TITLE + " JOIN " + TABLE_AUTHOR
+ " USING (" + KEY_TITLE_ID + ")"
+ " GROUP BY " + KEY_TITLE_ID;
Cursor c = db.rawQuery(selectQuery, null);
return c;
}
在主要的 activity 中,我使用 fillData
方法来填充 ListView:
private void fillData() {
Cursor c = db.fetchAllBooks();
startManagingCursor(c);
Log.d("count", c.getCount() + "");// could display the number of book. such as: count: 2; --- means cursor have 2 row(books)
if(c.moveToFirst()) {
do {
Log.d("title", BookContract.getTitle(c)); // could display the title of each book;
}while(c.moveToNext());
}
String[] from = new String[] {BookContract.KEY_TITLE, BookContract.KEY_AUTHORS};
int[] to = new int[] { R.id.cart_row_title, R.id.cart_row_author};
adapter = new SimpleCursorAdapter(this, R.layout.cart, c, from, to, 0);
setListAdapter(adapter);
}
如你所见,LogCat可以显示光标的内容。这意味着我成功检索了光标。但是,listView 无法显示书名和作者。我的代码中没有使用任何 db.close()
或 cursor.close()
。
cart_row.xml
表示列表中的每个行项目 view.And cart.xml
包含列表视图:
提前致谢。
我设法回答了我自己的问题。有点好笑...
请多多注意这句话:
the
cart_row.xml
which represent each row item in the list view. And thecart.xml
which contain a list view:
simpleCursorAdapter 需要 cart_row.xml
而不是 cart.xml
。所以将 simpleCursorAdapter 更改为:
adapter = new SimpleCursorAdapter(this, R.layout.cart_row, c, from, to, 0);