2013-07-22 65 views
0

我正在使用SimpleCursorAdapter和ListView從數據庫中檢索數據。 這是我的動態類來自數據庫的Android SimpleCursorAdapter和ListView

public class TimelineActivity extends ListActivity { 

    LoginDataBaseAdapter loginDataBaseAdapter; 

    @SuppressWarnings("deprecation") 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.list_view); 

     LoginDataBaseAdapter db = new LoginDataBaseAdapter(this); 
     //loginDataBaseAdapter = loginDataBaseAdapter.open(); 

     Cursor cursor = db.test(); 
     startManagingCursor(cursor); 

     SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
     android.R.layout.simple_list_item_1, cursor, 
     new String[] {db.get()}, 
     new int[] { android.R.id.text1 }); 
     setListAdapter(adapter); 
    } 
} 

而這是數據庫類。

public Cursor test() { 
    Cursor cursor = db.query(true, "LOGIN", new String[]{"USERNAME"}, null, null, null, null, null, null); 

    return cursor; 
} 
public String get(){ 
    Cursor c = null; 
    String a = c.getString(c.getColumnIndex("USERNAME")); 
    return a; 
} 

和錯誤消息

07-08 13:48:00.561: E/AndroidRuntime(14179): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.studio/com.example.studio.TimelineActivity}: java.lang.NullPointerException 
07-08 13:48:00.561: E/AndroidRuntime(14179): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651) 
07-08 13:48:00.561: E/AndroidRuntime(14179): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 
07-08 13:48:00.561: E/AndroidRuntime(14179): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
07-08 13:48:00.561: E/AndroidRuntime(14179): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 
07-08 13:48:00.561: E/AndroidRuntime(14179): at android.os.Handler.dispatchMessage(Handler.java:99) 
07-08 13:48:00.561: E/AndroidRuntime(14179): at android.os.Looper.loop(Looper.java:130) 
07-08 13:48:00.561: E/AndroidRuntime(14179): at android.app.ActivityThread.main(ActivityThread.java:3693) 
07-08 13:48:00.561: E/AndroidRuntime(14179): at java.lang.reflect.Method.invokeNative(Native Method) 
07-08 13:48:00.561: E/AndroidRuntime(14179): at java.lang.reflect.Method.invoke(Method.java:507) 
07-08 13:48:00.561: E/AndroidRuntime(14179): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907) 
07-08 13:48:00.561: E/AndroidRuntime(14179): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665) 
07-08 13:48:00.561: E/AndroidRuntime(14179): at dalvik.system.NativeStart.main(Native Method) 
07-08 13:48:00.561: E/AndroidRuntime(14179): Caused by: java.lang.NullPointerException 
07-08 13:48:00.561: E/AndroidRuntime(14179): at com.example.studio.LoginDataBaseAdapter.get(LoginDataBaseAdapter.java:217) 
07-08 13:48:00.561: E/AndroidRuntime(14179): at com.example.studio.TimelineActivity.onCreate(TimelineActivity.java:25) 
07-08 13:48:00.561: E/AndroidRuntime(14179): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
07-08 13:48:00.561: E/AndroidRuntime(14179): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) 
07-08 13:48:00.561: E/AndroidRuntime(14179): ... 11 more 

請幫助。

+0

嘗試調試並查看哪條特定代碼行失敗 –

+0

LoginDataBaseAdapter類中的第217行是什麼?嘗試在你的問題中包含該類的代碼。 – ObieMD5

+0

217行方法get(),我嘗試從表LOGIN獲取USERNAME列 – user2605369

回答

0

我沒有看到你的表結構,所以從我可以看到你使用db.query不正確,如果你已經設置了一個適當的異步任務或內容提供者。對db.query的調用,如果遵循約定,看起來不正確。

Cursor cursor = db.query(true, "LOGIN", new String[]{"USERNAME"}, null, null, null, null, null, null); 

查詢的第一個參數是表名,您的值爲true。通常,內容提供者中查詢的參數如下:

URI, 投影 - 列表列表 where_string - 例如'USERNAME =?' where_arguments_string_array - 每個值?在上述where_string中,以相應的順序排列 sortorder - 列號,即1或2 OR列名和排序順序(ASC或DESC)

where_string,where_arguments_string_array和sortorder如果未使用可以作爲null傳遞。

僅供參考,以防萬一Android喜歡使用_id整數自動增量作爲第一列,特別是當使用Listview,ExpandedListView等時。這就是它通過列表適配器將其屏幕視圖關聯到光標的方式。

希望這會有所幫助。

相關問題