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

AKT*_*ios 0 sqlite android android-context

我试图从非活动类加载SQLite数据库

我需要DBHelperAdapter类的上下文并使用ApplicationContextProvider如下所述的类.(我没有将这个添加到清单中,因为一些教程建议但是因为我不确定如何.)

CNYearsAdapter myCNYearsAdapter = new CNYearsAdapter( ApplicationContextProvider.getContext());
Run Code Online (Sandbox Code Playgroud)

应用环境提供者:

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;
}

}
Run Code Online (Sandbox Code Playgroud)

目前,实例化上面的行myCNYearsAdapter崩溃了程序,因此我不确定Application上下文提供程序是否正常工作.是否有另一种方法可以将上下文传递给此非活动类?

Ben*_*oli 6

必须将它添加到清单,否则ApplicationContextProvider将不能被实例化,onCreate()将永远不会被调用,sContent将保持null.

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

<application 
     android:name="your.package.name.ApplicationContextProvider"
 ...
Run Code Online (Sandbox Code Playgroud)

有没有另一种方法来将上下文传递给这个非活动类?

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

public class NonActivity {

    private Context mContext;

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

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

}
Run Code Online (Sandbox Code Playgroud)

在活动内:

NonActivity na = new NonActivity(this);
na.someMethod();
Run Code Online (Sandbox Code Playgroud)