0

非アクティビティ クラスから SQLite データベースをロードしようとしています

DBHelperAdapter クラスのコンテキストと、ApplicationContextProvider以下に概説するクラスを使用する必要があります。(一部のチュートリアルで提案されているように、これをマニフェストに追加していませんが、方法がわからないためです。)

CNYearsAdapter myCNYearsAdapter = new CNYearsAdapter( ApplicationContextProvider.getContext());

アプリケーション コンテキスト プロバイダー:

package com.example.kuachart;

import android.app.Application;
import android.content.Context;


public class ApplicationContextProvider extends Application {

/**
 * Keeps a reference of the application context
 */
private static Context sContext;

@Override
public void onCreate() {
    super.onCreate();

    sContext = getApplicationContext();

}

/**
 * Returns the application context
 *
 * @return application context
 */
public static Context getContext() {
    return sContext;
}

}

現在、インスタンス化する上記の行myCNYearsAdapterはプログラムをクラッシュさせるため、アプリケーション コンテキスト プロバイダーが正しく機能しているかどうかはわかりません。この非アクティビティ クラスにコンテキストを渡す別の方法はありますか?

4

3 に答える 3

6

マニフェストに追加する必要があります。そうしないApplicationContextProvider、インスタンス化されずonCreate()、呼び出されず、sContent残りnullます。

マニフェストのapplicationタグで、次の操作を行います。

<application 
     android:name="your.package.name.ApplicationContextProvider"
 ...

この非アクティビティ クラスに渡されるコンテキストを取得する別の方法はありますか?

アクティビティから非アクティビティ クラスにコンテキストをいつでも渡すことができます。

public class NonActivity {

    private Context mContext;

    public NonActivity(Context context){
        mContext = context;
    }

    public void someMethod(){
        CNYearsAdapter myCNYearsAdapter = new CNYearsAdapter(mContext);
        // do something
    }

}

アクティビティ内:

NonActivity na = new NonActivity(this);
na.someMethod();
于 2013-10-18T22:23:33.387 に答える
0

コンストラクターで、渡されたコンテキストがあることに気付きましたが、後で必要になったときにアクセサーがありませんでした。プライベート コンテキスト myContext; を追加しました。次に、コンストラクターでその値を設定します。そしたら後で使えます

public class TaskExpandListAdapter extends SimpleCursorTreeAdapter {
    private myDBHelper helper;
    private Context myContext; // define an object instance variable

    public TaskExpandListAdapter(Context context, Cursor cursor, int groupLayout,
                                 String[] groupFrom, int[] groupTo, int childLayout,
                                 String[] childFrom, int[] childTo) {
        super(context, cursor, groupLayout, groupFrom, groupTo, childLayout, childFrom, childTo);
        myContext = context; // set its value in the constructor
    }

    public Cursor fetchChildren(int groupID) {
        helper = new myDBHelper(myContext); //use it to access sqlite
        SQLiteDatabase sqlDB = helper.getReadableDatabase();

sqlite テーブルから展開可能なリスト ビューを作成しようとしていることに注意してください

于 2015-06-26T00:57:48.183 に答える