我正在尝试从非活动类加载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上下文提供程序是否正常工作。是否有其他方法可以将上下文传递给此非活动类?
答案 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表创建可扩展列表视图