2016-02-08 75 views
0

我想从数据库中检索数据。而在我在我将对DBAdapter,我用fetchAllBooks方法得到一个光标:simpleCursorAdapter无法显示光标

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; 
    } 

在主要活动中,我使用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

预先感谢。

+0

定义'ListView控件无法显示them' – njzk2

+0

@ njzk2你的意思是更换'setListAdapter(适配器)'和'ListView控件的ListView =(ListView控件)findViewById(android.R.id.list ); listView.setAdapter(适配器);'?但它仍然无法工作。 – sydridgm

+0

没有。我请你定义你的意思。怎么了? (另外,你在哪里调用fillData,你的布局是什么样的,你有什么尝试?) – njzk2

回答

1

我设法回答我自己的问题。有点滑稽......

请多加注意这句话:

代表在列表视图中的每一行项目cart_row.xml。并且包含一个列表视图中cart.xml

的simpleCursorAdapter需要cart_row.xml代替cart.xml。因此,改变simpleCursorAdapter到:

adapter = new SimpleCursorAdapter(this, R.layout.cart_row, c, from, to, 0);

+0

我刚要问一下'cart.xml'文件。很高兴你想出来了。 –