如何从AsyncTask使用SQLite数据库?

我一直在使用我的Activity类访问我的数据库,这使我的程序有时会冻结。

所以我决定使用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上下文),但是这个类不是一个“上下文”,所以我如何在这里使用我的数据库呢?

请提供例子,如果可以的话

请不要给我链接到谷歌的参考,是一个新手,我觉得他们很难遵循

Solutions Collecting From Web of "如何从AsyncTask使用SQLite数据库?"

你需要在这里传递应用程序的上下文

 this.db = new TheDB(getApplicationContext()); 
 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(); } } 

有两种方法,我看到:

  1. 将一个上下文对象传递给你的AsyncTask构造函数,然后像这样实例化数据库this.db = new TheDB(context);

  2. 或者您可能可以将实际的数据库对象传递给构造函数,但第一种方法似乎更好。

学习编程的一个重要部分是学习阅读和理解文档。 正如文档所说,Android文档非常详细,所以它真的值得你花时间去理解它们是如何工作的。

正如你可以在AsyncTask文档中看到的, AsyncTask中没有onCreateonExecute方法。

文档清楚地onPreExecute()您完成AsyncTask, onPreExecute()doInBackground(Params...)onProgressUpdate(Progress...)onPostExecute(Result)的4个主要function。

您的实例可能的select是onPreExecute()doInBackground(Params...) 。 不同之处在于是否要在UI线程上进行初始化。 如果你不这样做,那么在doInBackground(Params...)