2014-06-10 42 views
-1

我想根據this教程實現一個可排序的listView。我的數據庫中有這些列:關於可排序ListView的SQLite

  • ID
  • NAME
  • 集團
  • ORDER

當我插入數據庫的新數據,我設置名稱和組列,該ID是自動生成的。起初,我沒有在ORDER列中引入任何內容,因爲我將需要稍後修改此值,並且第一次不相關。

因此,在第一個活動中,我在數據庫中插入先前註釋的列,然後轉到listActivity,其中將顯示帶有名稱的listview。我可以介紹幾個不同的名稱,並使用GROUP列組織它們。所以當我想讀取數據庫來綁定列表視圖上的結果時,我會查詢特定的GROUP。

這裏是ORDER列的功能,如果該組已經存在於數據庫中,它將加載該命令並按照該順序將這些名稱放入列表視圖中。但如果它是一個新的組,ORDER列將是空的,當對listview上的項目進行排序時,我將定義每個項目的順序。

我的問題:

從數據庫是空的,所以沒有訂單就堅定,當我嘗試查詢特定組,起初我是有順序列問題的角度出發,因爲它說明該列不存在或類似的東西。但是現在,我用適配器構造函數得到了一個N​​PE,我不知道它是否與它或查詢有關。

這是數據庫列的投影:

String[] PROJECTION = {_ID, .NAME, GROUP, ORDER}; 

在這裏我讀數據庫的特定羣體,我將它綁定在列表視圖(以及從哪裏獲得NPE):

String selection = GROUP + "=?"; 
    String[] selectionArgs = new String[] {group}; 
    String orden = ORDER + " ASC"; 
    try { 
     cursor = getContentResolver().query(TravelOrderProvider.CONTENT_URI, PROJECTION, selection , selectionArgs , orden); 
    } catch (Exception e) {} 
    ListAdapter mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cursor, null, null); //NPE HERE 
    setListAdapter(mAdapter); 
    cursor.close(); 

仍然必須檢查數據庫上是否存在該組。

logcat的補充道:

06-10 15:52:28.473: E/AndroidRuntime(18016): FATAL EXCEPTION: main 
06-10 15:52:28.473: E/AndroidRuntime(18016): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.irvvin.carpooling/com.irvvin.carpooling.SetTravelOrderActivity}: java.lang.NullPointerException 
06-10 15:52:28.473: E/AndroidRuntime(18016): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2194) 
06-10 15:52:28.473: E/AndroidRuntime(18016): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2229) 
06-10 15:52:28.473: E/AndroidRuntime(18016): at android.app.ActivityThread.access$600(ActivityThread.java:139) 
06-10 15:52:28.473: E/AndroidRuntime(18016): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1261) 
06-10 15:52:28.473: E/AndroidRuntime(18016): at android.os.Handler.dispatchMessage(Handler.java:99) 
06-10 15:52:28.473: E/AndroidRuntime(18016): at android.os.Looper.loop(Looper.java:154) 
06-10 15:52:28.473: E/AndroidRuntime(18016): at android.app.ActivityThread.main(ActivityThread.java:4944) 
06-10 15:52:28.473: E/AndroidRuntime(18016): at java.lang.reflect.Method.invokeNative(Native Method) 
06-10 15:52:28.473: E/AndroidRuntime(18016): at java.lang.reflect.Method.invoke(Method.java:511) 
06-10 15:52:28.473: E/AndroidRuntime(18016): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
06-10 15:52:28.473: E/AndroidRuntime(18016): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
06-10 15:52:28.473: E/AndroidRuntime(18016): at dalvik.system.NativeStart.main(Native Method) 
06-10 15:52:28.473: E/AndroidRuntime(18016): Caused by: java.lang.NullPointerException 
06-10 15:52:28.473: E/AndroidRuntime(18016): at android.support.v4.widget.SimpleCursorAdapter.findColumns(SimpleCursorAdapter.java:312) 
06-10 15:52:28.473: E/AndroidRuntime(18016): at android.support.v4.widget.SimpleCursorAdapter.<init>(SimpleCursorAdapter.java:66) 
06-10 15:52:28.473: E/AndroidRuntime(18016): at com.irvvin.carpooling.SetTravelOrderActivity.getTravelers(SetTravelOrderActivity.java:95) 
06-10 15:52:28.473: E/AndroidRuntime(18016): at com.irvvin.carpooling.SetTravelOrderActivity.onCreate(SetTravelOrderActivity.java:51) 
06-10 15:52:28.473: E/AndroidRuntime(18016): at android.app.Activity.performCreate(Activity.java:4531) 
06-10 15:52:28.473: E/AndroidRuntime(18016): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1071) 
06-10 15:52:28.473: E/AndroidRuntime(18016): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2150) 
+0

後logcat的消息 –

+0

@Mukesh庫馬爾logcat的加入 – masmic

+0

你傳遞兩個NULL參數讓你獲得一個NPE – LordRaydenMK

回答

2
ListAdapter mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cursor, null, null); //NPE HERE 

,而不是你有null, null通過2個陣列: String數組與列名稱和int數組與該行的ID(從佈局)android.R.layout.simple_list_item_1

例如:
ListAdapter adapter = new SimpleCursorAdapter(this, // Context. 
     android.R.layout.two_line_list_item, // Specify the row template 
          // to use (here, two 
          // columns bound to the 
          // two retrieved cursor 
          // rows). 
     mCursor, // Pass in the cursor to bind to. 
     // Array of cursor columns to bind to. 
     new String[] { ContactsContract.Contacts._ID, 
      ContactsContract.Contacts.DISPLAY_NAME }, 
     // Parallel array of which template objects to bind to those 
     // columns. 
     new int[] { android.R.id.text1, android.R.id.text2 }); 

來源:http://www.vogella.com/tutorials/AndroidListView/article.html#cursor

+0

非常感謝,數據庫仍然是我需要學習的一個領域 – masmic