我一直在使用我的 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(); 
    }
}

我看到有两种方法:

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

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

学习程序正在学习阅读和理解文档的一个重要部分。作为文档去,Android的文档都非常详细,所以它真的值得你花时间了解他们的工作。

可以在的AsyncTask文档,没有看到在onCreate onExecuteAsyncTask方法。

该文档清楚地步行通过一个的AsyncTask,onPreExecute()doInBackground(Params...)onProgressUpdate(Progress...)onPostExecute(Result)的4种主要功能。

为实例的可能的选择是onPreExecute()doInBackground(Params...)。所不同的是,你是否希望在UI线程上发生的initializition。如果你不这样做,那么做在doInBackground(Params...)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top