2013-03-20 45 views
1

我想填充一個列表並從活動中打開的數據庫執行此操作。我做了一個自定義的適配器,並且'helper'類調用了另一個'helper'類的listview包裝器。在那個listview包裝器中,我想打開另一個(不同的)數據庫,但是我得到一個空指針異常。Nullpointer database.open(),getwritabledatabase

所以在活動我打電話:

adapter = new ListViewAdapter(this, ListViewAdapter.TPL_HISTORY, historydatasource.getAllCalls()); 
      list.setAdapter(adapter); 

比起historydatasource類打開來處理我的列表視圖中創建的模板listviewwrapper(助手)類。在那裏我想打開另一個數據庫,但我得到一個空指針異常。

任何人的想法,我可以做到這一點?

 DB_DataSource cardsdatasource=new DB_DataSource(myContext); 
cardsdatasource.open(); (GIVES NULLPOINTER, because myContext=null) 

有沒有辦法獲得上下文?

錯誤:

03-20 14:03:51.919: E/AndroidRuntime(15492): FATAL EXCEPTION: main 
03-20 14:03:51.919: E/AndroidRuntime(15492): java.lang.NullPointerException 
03-20 14:03:51.919: E/AndroidRuntime(15492): at com.myapp.testapp.ListViewWrapper.populateFrom(ListViewWrapper.java:91) 
03-20 14:03:51.919: E/AndroidRuntime(15492): at com.myapp.testapp.ListViewAdapter.getView(ListViewAdapter.java:121) 
03-20 14:03:51.919: E/AndroidRuntime(15492): at android.widget.AbsListView.obtainView(AbsListView.java:1536) 
03-20 14:03:51.919: E/AndroidRuntime(15492): at android.widget.ListView.makeAndAddView(ListView.java:1793) 
03-20 14:03:51.919: E/AndroidRuntime(15492): at android.widget.ListView.fillDown(ListView.java:718) 
03-20 14:03:51.919: E/AndroidRuntime(15492): at android.widget.ListView.fillFromTop(ListView.java:775) 
03-20 14:03:51.919: E/AndroidRuntime(15492): at android.widget.ListView.layoutChildren(ListView.java:1646) 
03-20 14:03:51.919: E/AndroidRuntime(15492): at android.widget.AbsListView.onLayout(AbsListView.java:1366) 
03-20 14:03:51.919: E/AndroidRuntime(15492): at android.view.View.layout(View.java:7175) 
03-20 14:03:51.919: E/AndroidRuntime(15492): at android.widget.RelativeLayout.onLayout(RelativeLayout.java:912) 
03-20 14:03:51.919: E/AndroidRuntime(15492): at android.view.View.layout(View.java:7175) 
03-20 14:03:51.919: E/AndroidRuntime(15492): at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 
03-20 14:03:51.919: E/AndroidRuntime(15492): at android.view.View.layout(View.java:7175) 
03-20 14:03:51.919: E/AndroidRuntime(15492): at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 
03-20 14:03:51.919: E/AndroidRuntime(15492): at android.view.View.layout(View.java:7175) 
03-20 14:03:51.919: E/AndroidRuntime(15492): at android.view.ViewRoot.performTraversals(ViewRoot.java:1146) 
03-20 14:03:51.919: E/AndroidRuntime(15492): at android.view.ViewRoot.handleMessage(ViewRoot.java:1866) 
03-20 14:03:51.919: E/AndroidRuntime(15492): at android.os.Handler.dispatchMessage(Handler.java:99) 
03-20 14:03:51.919: E/AndroidRuntime(15492): at android.os.Looper.loop(Looper.java:123) 
03-20 14:03:51.919: E/AndroidRuntime(15492): at android.app.ActivityThread.main(ActivityThread.java:3687) 
03-20 14:03:51.919: E/AndroidRuntime(15492): at java.lang.reflect.Method.invokeNative(Native Method) 
03-20 14:03:51.919: E/AndroidRuntime(15492): at java.lang.reflect.Method.invoke(Method.java:507) 
03-20 14:03:51.919: E/AndroidRuntime(15492): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
03-20 14:03:51.919: E/AndroidRuntime(15492): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 
03-20 14:03:51.919: E/AndroidRuntime(15492): at dalvik.system.NativeStart.main(Native Method) 
+0

分享方法'open'的代碼 – 2013-03-20 13:37:29

回答

1

這確實是一個上下文問題,我將Custom.Adapter中的activity.getApplicationContext()傳遞給了包裝器,並且被解決了。

0

中,我讓我的DataSource類是如下的方式:

public class StudyManagerDataSource { 

    public static final String LOG_TAG = "studymanager"; 

    SQLiteOpenHelper dbHelper; 
    SQLiteDatabase database;   

    // -------------------------------------------------------------------------------------------- 

    public StudyManagerDataSource(Context context) { 
     dbHelper = new DBOpenHelper(context); 

    } 

    // -------------------------------------------------------------------------------------------- 

    public void open() { 
     database = dbHelper.getWritableDatabase(); 
     Log.i(LOG_TAG, "Database Opened"); 
    } // end method open 

    public void close() { 
     Log.i(LOG_TAG, "Database Closed"); 
     dbHelper.close(); 
    } // end method close 
    /* 
    Other methods for manipulating tables goes here... 
     */  
} 

告訴我,如果它解決您的問題!