如何从 AsyncTask 使用 SQLite DB?
-
27-09-2019 - |
题
我一直在使用我的 Activity 类来访问我的数据库,这有时会使我的程序冻结。
所以我决定使用 AsyncTask 来处理数据库。
我的问题是我不知道如何从 AsyncTask 类实例化我的 SQLite DB“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),但这个类不是“上下文”,所以我如何在这里使用我的数据库?
如果可以的话请提供示例
请不要给我谷歌参考文献的链接,我是新手,我发现它们很难理解
解决方案
您需要在这里通过应用程序上下文
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();
}
}
我看到有两种方法:
将上下文对象传递给 AsyncTask 构造函数,然后像这样实例化数据库 this.db = new TheDB(context);
或者您可能可以将实际的数据库对象传递给构造函数,但第一种方法似乎更好。
学习程序正在学习阅读和理解文档的一个重要部分。作为文档去,Android的文档都非常详细,所以它真的值得你花时间了解他们的工作。
可以在的AsyncTask文档,没有看到在onCreate
onExecute
或AsyncTask
方法。
该文档清楚地步行通过一个的AsyncTask,onPreExecute()
,doInBackground(Params...)
,onProgressUpdate(Progress...)
,onPostExecute(Result)
的4种主要功能。
为实例的可能的选择是onPreExecute()
或doInBackground(Params...)
。所不同的是,你是否希望在UI线程上发生的initializition。如果你不这样做,那么做在doInBackground(Params...)
。