2011-09-13 63 views
1

我有一個ListActivity來顯示一個Arraylist。 在onListItemClick()我調用另一個ListActivity。 我有一個特定的類來擴展SQLiteOpenHelper()來管理數據庫。android遊標列表和活動

在第一ListActivity我有此代碼

protected void onListItemClick(ListView l, View v, int position, long id) { 
    String selection = l.getItemAtPosition(position).toString(); 
    secondListActivity itemsList= new secondListActivity(); 
    itemsList.showItemsList(selection); 
    //Toast.makeText(this, selection, Toast.LENGTH_LONG).show(); 
} 

的showComicsList()方法在secondListActivity已經

public void showItemsList(String name) 
{ 
    DatabasesManager databaseHelper = new DatabasesManager(this); 
    Cursor series = databaseHelper.getItemsIdByName(name); 
    Cursor cursor = databaseHelper.getChildren(series.getString(0)); 

    for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { 
    //fetching from database and adding to arrayList 
    results.add(cursor.getString(cursor.getColumnIndex(ChildrensTable.NUMBER))); 
    } 

    cursor.close(); 

    //display in screen 
    this.setListAdapter(
    new ArrayAdapter<Object>(
     secondListActivity.this, 
     android.R.layout.simple_list_item_1, 
     results 
    ) 
); 
} 

的getItemsIdByName()調用光標

public Cursor getItemsIdByName(String name) 
{ 
    return(getReadableDatabase().query(
    itemsTable.TABLE_NAME, 
    null, 
    "name =" + name, 
    null, 
    null, 
    null, 
    null, 
    null)); 
} 

當我打電話給getItemsIdByName()我得到這個錯誤

09-12 14:12:17.906: ERROR/AndroidRuntime(6090): FATAL EXCEPTION: main 
09-12 14:12:17.906: ERROR/AndroidRuntime(6090): java.lang.NullPointerException 
09-12 14:12:17.906: ERROR/AndroidRuntime(6090):  at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203) 
09-12 14:12:17.906: ERROR/AndroidRuntime(6090):  at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:118) 
09-12 14:12:17.906: ERROR/AndroidRuntime(6090):  at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:187) 
09-12 14:12:17.906: ERROR/AndroidRuntime(6090):  at zepod.whatelsecomics.databases.wecDatabasesManager.getComics(wecDatabasesManager.java:159) 
09-12 14:12:17.906: ERROR/AndroidRuntime(6090):  at zepod.whatelsecomics.WhatelsecomicsListActivity.showComicsList(WhatelsecomicsListActivity.java:25) 
09-12 14:12:17.906: ERROR/AndroidRuntime(6090):  at zepod.whatelsecomics.WhatelsecomicsActivity.onListItemClick(WhatelsecomicsActivity.java:47) 
09-12 14:12:17.906: ERROR/AndroidRuntime(6090):  at android.app.ListActivity$2.onItemClick(ListActivity.java:319) 
09-12 14:12:17.906: ERROR/AndroidRuntime(6090):  at android.widget.AdapterView.performItemClick(AdapterView.java:284) 
09-12 14:12:17.906: ERROR/AndroidRuntime(6090):  at android.widget.ListView.performItemClick(ListView.java:3513) 
09-12 14:12:17.906: ERROR/AndroidRuntime(6090):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:1800) 
09-12 14:12:17.906: ERROR/AndroidRuntime(6090):  at android.os.Handler.handleCallback(Handler.java:587) 
09-12 14:12:17.906: ERROR/AndroidRuntime(6090):  at android.os.Handler.dispatchMessage(Handler.java:92) 
09-12 14:12:17.906: ERROR/AndroidRuntime(6090):  at android.os.Looper.loop(Looper.java:123) 
09-12 14:12:17.906: ERROR/AndroidRuntime(6090):  at android.app.ActivityThread.main(ActivityThread.java:3647) 
09-12 14:12:17.906: ERROR/AndroidRuntime(6090):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-12 14:12:17.906: ERROR/AndroidRuntime(6090):  at java.lang.reflect.Method.invoke(Method.java:507) 
09-12 14:12:17.906: ERROR/AndroidRuntime(6090):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
09-12 14:12:17.906: ERROR/AndroidRuntime(6090):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
09-12 14:12:17.906: ERROR/AndroidRuntime(6090):  at dalvik.system.NativeStart.main(Native Method) 

有人可以幫我嗎?

+0

在聲明後調用'databaseHelper.open()'。 –

+0

當我粘貼databaseHelper.open()IDE說我需要ti在databasehelper中創建一個打開的方法 – aczepod

+0

哦,然後編輯你的問題並向我們展示你的'DatabaseHelper.java'代碼,你必須創建一個方法'open ()' –

回答

0

很可能對你secondListActivity的context沒有設置,因爲你只是實例它通常不使用startActivity

這是我假設你在哪裏實例化你的第二個表(在您context爲空)行:

secondListActivity itemsList= new secondListActivity(); 

如果按照這個堆棧跟蹤:

android.content.ContextWrapper.openO rCreateDatabase(ContextWrapper.java:203)

Android source code,你會看到線203

return mBase.openOrCreateDatabase(name, mode, factory); 

哪裏mBase是您在SQLiteOpenHelper設置上下文。如果你想在同一活動使用第二個列表

在代碼中,假設DatabasesManager是一個將與誰SQLiteOpenHelper互動,很可能this,你傳遞給它爲空


// "this" is possibly null 
DatabasesManager databaseHelper = new DatabasesManager(this); 
Cursor series = databaseHelper.getItemsIdByName(name); 

,你應考慮直接在代碼中使用ListView,而不使用另一個ListActivity