我上课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);在主要活动中然后工作并创建数据库。所以请帮忙,以便我可以在后台线程中创建数据库。

最佳答案

但是当我在主目录中运行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();


还应尝试遵守名称约定。

10-02 04:48