我有类CreateDB
public class CreateDB extends SQLiteOpenHelper{ // SQLiteOpenHelper auto create if db not exists.
private static final int DB_VERSION = 1;
private static final String DB_NAME = "mydb.db";
public CreateDB(Context ctx) {
super(ctx, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE friends (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, phonenumber INTEGER);");
}}
我在另一个充当后台线程的类中调用createdb
public class manager extends AsyncTask<Void, Void, String> {
public Context context;
@Override
protected String doInBackground(Void... params) {
CreateDB dbhelp = new CreateDB(context);
}
}
当我运行它然后它停止工作,模拟器给出错误,该应用程序停止响应
但是当我运行`CreateDB dbhelp = new CreateDB(this);在主要活动中,它工作,并创建数据库。所以请帮助,以便我可以在后台线程中创建数据库。
答案 0 :(得分:2)
但是当我在main中运行
CreateDB dbhelp = new CreateDB(this);
时 活动然后它工作,并创建数据库
因为您忘记在context
中初始化AsyncTask
个对象。
public class manager extends AsyncTask<Void, Void, String> {
public Context context; <-- Declared but not initialized
@Override
protected String doInBackground(Void... params) {
CreateDB dbhelp = new CreateDB(context);
}
您可以为AsyncTask创建一个构造函数:
public manager(Context context) {
this.context = context;
}
然后在你的活动中:
new manager(this).execute();
同时尝试尊重名称约定。
答案 1 :(得分:0)
您需要将有效的上下文作为参数传递:
CreateDB dbhelp = new CreateDB(getContext());