从非活动类获取上下文到非活动

时间:2015-01-05 08:42:10

标签: android database sqlite android-sqlite android-context

我想从我的数据库中访问 DBAdapter.class (非活动)到另一个非活动类中来获取数据 RandomData.class

我的示例代码如下:

DBAdapter getAvailRandom=new DBAdapter(getApplicationContext());
 getAvailRandom.open();
 ...
 ....
 ...

 getAvailRandom.close();

getApplicationContext()始终未定义

我尝试了getActivity.getApplicationContext()Activity.this,但仍无效

5 个答案:

答案 0 :(得分:4)

您需要创建一个参数Constructor并传递Context,如

private Context mContext;

public DBAdapter(Context con){
        mContext = con;
}

在您的DBAdapter班级

DBAdapter getAvailRandom=new DBAdapter(getApplicationContext());

答案 1 :(得分:0)

将Context传递给构造函数中的非Activity类,并将该引用用于所需的位置。例如

public     DBAdapter(Context mCtx){

this.mCtx = mCtx;

}

对于RandomData

public RandomData(Context mCtx){

this.mCtx = mCtx;

}

答案 2 :(得分:0)

您应该将上下文传递给您正在调用的构造函数或方法。

private Context mContext;

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

编辑:

只是为了好玩,您实际上可以以静态方式获取应用程序上下文。这是推荐:

public static Context getContext() {
        Context context = null;
        try {
            Class<?> activityThreadClass = Class.forName("android.app.ActivityThread");
            Method method = activityThreadClass.getMethod("currentApplication");
            context = (Application) method.invoke(null, (Object[]) null);
        } catch (Exception ignored) {
        }
        return context;
}

答案 3 :(得分:0)

您无法在普通的java类中访问getApplicationContext(),因此您需要使用RandomData类构造函数从Activity获取Context:

Context context;
RandomData(Context context){
  this.context=context;
}

现在在DBAdapter构造函数中传递上下文:

DBAdapter getAvailRandom=new DBAdapter(context);

答案 4 :(得分:0)

避免存储对应用程序的整个上下文的引用并根据上下文的生命周期呈现非活动类的另一种可能性是提供将上下文作为参数的(静态)方法。

以这种方式:

public static void doDbStuff(Context context, ...) { .. }