我想从我的数据库中访问 DBAdapter.class (非活动)到另一个非活动类中来获取数据 RandomData.class
我的示例代码如下:
DBAdapter getAvailRandom=new DBAdapter(getApplicationContext());
getAvailRandom.open();
...
....
...
getAvailRandom.close();
getApplicationContext()
始终未定义
我尝试了getActivity.getApplicationContext()
和Activity.this
,但仍无效
答案 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, ...) { .. }