2011-09-13 4 views
1

나는 Arraylist를 보여주기 위해 ListActivity를 가지고 있습니다. onListItemClick()에서 다른 ListActivity를 호출합니다. db를 관리하기 위해 SQLiteOpenHelper()를 확장 할 특정 클래스가 있습니다. 제 ListActivity에서안드로이드 커서 목록 및 활동

난 secondListActivity이 코드를

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() 메소드가있다

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) 

누군가 나를 도울 수 있습니까? 방금 이것은 당신이 (당신의 context가 null) 두 번째 목록을 인스턴스화하는 어디 가정 줄입니다 startActivity

를 사용하지 않고 정상적으로 인스턴스화되기 때문에

+0

선언 후 'databaseHelper.open()'을 호출하여 직접 코드에서 ListView을 사용하는 것을 고려해야합니다. –

+0

내가 붙여 넣을 때 databaseHelper.open() 붙여 넣기 때 내가 말하길, 내가 databasehelper – aczepod

+0

오, 다음 질문을 편집하고 우리에게 당신의'DatabaseHelper.java' 코드를 보여주기 위해 열려있는 메소드를 만들 필요가 있다고 말하면, 당신은 분명히 메소드'open()' –

답변

0

그것은 가능성이 secondListActivity에 context가 설정되지이다 :

secondListActivity itemsList= new secondListActivity(); 

이 스택 트레이스 따르십시오 :

android.content.ContextWrapper.openO을 mBase 당신이 SQLiteOpenHelper에서 설정 한 상황 인 경우 rCreateDatabase (ContextWrapper.java:203)을 Android source code에서

, 당신은 그 라인 (203)이

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

입니다 볼 수 있습니다. 이 같은 활동에 두 번째 목록을 사용하려면 DatabasesManager 가정 코드에서

가, SQLiteOpenHelper와 상호 작용하는 것입니다, 당신이 그것을 통과 가능성이 this입니다 당신은,


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

null의 경우 ListActivity

관련 문제