2013-10-26 38 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());