7

我一直在使用我的Activity類來訪問我的數據庫,這有時會讓我的程序凍結。如何從AsyncTask使用SQLite數據庫?

所以我決定使用AsyncTask來處理數據庫。

我的問題是我不知道如何從的AsyncTask的類實例化了我的SQLite數據庫「TheDB」

public class myClass extends AsyncTask<Void, Void, Void>{ 
private TheDB db; 

any method() { 
    this.db = new TheDB(this); //<-- Error here 
} 

這個工作在Activity類罰款,但我不知道如何在這裏使用它

TheDB的構造函數是TheDB(Context context),但這個類不是一個「上下文」,所以我該如何在這裏使用我的數據庫?

請舉例,如果你能

請不要給我鏈接到谷歌的引用,是一個新手,我覺得他們很難跟隨

回答

9

你需要通過此應用程序上下文

this.db = new TheDB(getApplicationContext()); 
-1

學習計劃的一個重要部分是學習閱讀並理解文檔。正如文檔所說,Android文檔非常詳細,所以它真的值得你花時間去理解它們的工作方式。

正如您在AsyncTask docs中看到的那樣,在AsyncTask中沒有onCreateonExecute方法。

的文檔清晰地引導您通過的AsyncTask,onPreExecute()doInBackground(Params...)onProgressUpdate(Progress...)onPostExecute(Result)的4種主要功能。

您的實例可能的選擇是onPreExecute()doInBackground(Params...)。區別在於你是否想要在UI線程上進行初始化。如果你不這樣做,那麼在doInBackground(Params...)

+0

嗨brotha,感謝您的快速回復,我沒有實現這些自動「使用Eclipse IDE」,但仍然在我使用該行「this.db = new TheDB(this);」但是,「this」不是一個Context ans,因此不能用於實例化DB。那麼如何使用這個類中的數據庫呢?如果有不同的方式 – ZiGi 2010-11-24 02:36:58

+0

正如khotmanship所說,您可以在您的活動中使用內部類來訪問活動的上下文。 – 2010-11-24 03:47:10

6
import android.content.Context; 

public class SuperTask extends AsyncTask<Void, Void, Void> { 
    private final Context mContext; 

    public SuperTask(Context context) { 
     super(); 
     this.mContext = context 
    } 

    protected Void doInBackground(Void... params) { 
     // using this.mContext 
    } 
} 

public class MainActivity extends Activity { 
    // and run from Activity 
    public void onButtonClick(View view) { 
     new SuperTask(this.getApplicationContext()).execute(); 
    } 
} 
0

有兩種方式,我看到:

  1. 傳遞一個上下文對象到您的AsyncTask的構造,然後實例數據庫一樣this.db = new TheDB(context);

  2. 或者您可能可以將實際的數據庫對象傳遞給構造函數,但第一種方法似乎更好。

相關問題