1

リストに記入し、アクティビティで開いたデータベースからこれを実行したいと思います。カスタムアダプタを作成し、その「helper」クラスが別の「helper」クラスをリストビューラッパーと呼びます。そのリストビューラッパーで、別の(別の)データベースを開きたいのですが、nullpointer例外が発生します。

だから私が呼ぶ活動では:

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

historydatasourceクラスよりも、リストビュー用に作成したテンプレートを処理するlistviewwrapper(ヘルパー)クラスを開きます。そこで別のデータベースを開きたいのですが、nullpointer例外が発生します。

誰かが私がこれをどのように行うことができるか考えていますか?

        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)
4

2 に答える 2

1

これは確かにコンテキストの問題でした。CustomAdapterからラッパーにactivity.getApplicationContext()を渡して、解決しました。

于 2013-03-20T17:35:48.927 に答える
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...
       */    
}

それがあなたの問題を解決したかどうか教えてください!

于 2013-03-20T13:43:48.977 に答える