2010-07-24 176 views
1

我有一個列表視圖與幾列;諸如名稱,日期等。我希望能夠點擊標題TextView並按該字段對列表進行排序。當列表加載變量作品,並且按字段_id查詢和排序列表(除了它的工作原理沒有意外),但是當我點擊標題TextView時,我得到了一個強制關閉:通過訂單

線程[< 3>主](暫停(例外SQLiteException))
ViewRoot.handleMessage(消息)線:1757
的ViewRoot(處理程序).dispatchMessage(消息)線:99 Looper.loop()線:123 ActivityThread.main( Method.invokeNative(Object,Object [],Class,Class [],Class,int,boolean)line:不可用[本機方法]
Method.invoke(Object,對象...)線:521
ZygoteInit $ MethodAndArgsCaller.run()線:860
ZygoteInit.main(字符串[])線:618 NativeStart.main(字符串[])行:不可用[本機方法]

當不改變我的orderby變量時,TextView不會發生錯誤。

設置變量:

private View.OnClickListener NameSortbtnListener = new View.OnClickListener(){

public void onClick(View v){ 

      sort = " KEY_JOURNAL_TITLE "; 
      fillData(); 
     } 

    }; 

填充LIST:

private void fillData() { Cursor notesCursor = mDbHelper.fetchAllJournals(sort); startManagingCursor(notesCursor);

 String[] from = new String[]{journalDbAdapter.KEY_JOURNAL_TITLE, 
       journalDbAdapter.KEY_LOCATION, journalDbAdapter.KEY_JDATE, 

       journalDbAdapter.KEY_STEPS}; 

     int[] to = new int[]{R.id.text1, R.id.text2, R.id.text3, R.id.text4}; 


     SimpleCursorAdapter notes = 
      new SimpleCursorAdapter(this, R.layout.notes_row, notesCursor, 

from, to); setListAdapter(notes); }

QUERY(IN DB適配器):

public Cursor fetchAllJournals(String sort) {

 return mDb.query(DATABASE_JOURNAL_TABLE, new String[] {KEY_JROWID, 
       KEY_JOURNAL_TITLE, KEY_JOURNAL_NOTES, KEY_JDATE, KEY_LOCATION, 
       KEY_STEPS},null , null, null, null, sort ,null); 
    } 

回答

0

我添加了一個訂單字符串,並將它們組合在聲明中... sort的值是「name」,order的值是「ASC」。兩個字符串都存儲在引號中。

 
public Cursor fetchAllJournals(String sort, String order) { 

     return mDb.query(DATABASE_JOURNAL_TABLE, new String[] {KEY_JROWID, 
       KEY_JOURNAL_TITLE, KEY_JOURNAL_NOTES, KEY_JDATE, KEY_LOCATION, 
       KEY_STEPS},null , null, null, null, " " + sort + " " + order + " " ,null); 
    } 

0

隨口說說,我不知道你的問題是什麼。但是,當您捕獲異常時,您應該能夠在SQLiteException對象中打印出消息,以幫助追蹤問題。

除此之外,我假設你有常量定義了一些例如: String KEY_JROWID =「KEY_JROWID」; 字符串KEY_JOURNAL_TITLE =「KEY_JOURNAL_TITLE」;

在您的onClick事件中,您將排序設置爲「KEY_JOURNAL_TITLE」而不是KEY_JOURNAL_TITLE。如果列名不直接與變量名稱匹配,SQLite可能會拋出未找到列的異常。

我看到的唯一另一個可能的問題是排序列前後的隨機空間。不知道,爲什麼你有它......所以他們可能是一個原因。我真的懷疑這會造成問題,但只是在黑暗中拍攝而已。

+0

在數據庫適配器是有每個字段的常量。 我玩過的間距仍然是相同的錯誤。 另外:我可能沒有指出我在調用查詢之前聲明瞭sort並且沒有錯誤。 private String sort =「null」; – Brian 2010-07-24 22:51:25

+0

關於SQLiteException的消息呢?如果您將sort =「KEY_JOURNAL_TITLE」替換爲sort = KEY_JOURNAL_TITLE,該怎麼辦? – aepryus 2010-07-25 02:14:16

+0

我現在無法測試它,但我不相信你可以設置一個字符串不帶引號 – Brian 2010-07-25 16:49:12