2013-10-26 37 views
0

创建SQLite数据库,我有类CREATEDB无法在Android的

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

回答

1

,但是当我在主 活动运行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(); 

也尽量尊重命名惯例。

+0

所以,我怎么能初始化什么 – user776046

+0

当你调用你的活动的AsyncTask,您可以通过自己的活动为参数上下文语境和(用'this'),就像我在构造函数中所做的那样。 –

+0

非常感谢您的帮助:) – user776046

0

你需要通过有效的上下文作为参数:

CreateDB dbhelp = new CreateDB(getContext());