将上下文传递给Android中的dbHelper的非活动类

时间:2013-10-18 22:13:52

标签: android sqlite android-context

我正在尝试从非活动类加载SQLite数据库

我需要DBHelper Adapter类的上下文并使用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的行正在崩溃程序,所以我不确定Application上下文提供程序是否正常工作。是否有其他方法可以将上下文传递给此非活动类?

3 个答案:

答案 0 :(得分:6)

执行 必须将其添加到清单中,否则ApplicationContextProvider将不会被实例化,onCreate()将永远不会被调用sContent {1}}将保持null

在您的清单application标记中,执行以下操作:

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

还有另一种方法可以将上下文传递给这个非活动类吗?

好吧,你总是可以将Context从Activity传递给非活动类。

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();

答案 1 :(得分:0)

在您创建的活动中添加ApplicationContextProvider aa = new ApplicationContextProvider(this);,系统会要求您在ApplicationContextProvider中创建一个简单方法,然后您可以使用Activity's上下文。

答案 2 :(得分: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表创建可扩展列表视图