質問

アクティビティクラスを使用してDBにアクセスしており、プログラムが時々フリーズしました。

そこで、私は代わりにasynctaskを使用してDBを処理することにしました。

私の問題は、asynctaskのクラスからsqlitedb "thedb"をインスタンス化する方法がわからないことです

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

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

これはアクティビティクラスで正常に機能しましたが、ここで使用する方法がわかりません

thedbのコンストラクターはthedb(コンテキストコンテキスト)ですが、このクラスは「コンテキスト」ではないので、ここでDBを使用するにはどうすればよいですか?

可能であれば例を提供してください

そして、Googleの参照へのリンクを私に与えないでください、初心者であり、私はそれらをフォローするのが難しいと思います

役に立ちましたか?

解決

ここでアプリケーションのコンテキストを渡す必要があります

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(); 
    }
}

私が見る方法は2つあります:

  1. コンテキストオブジェクトをasynctaskコンストラクターに渡し、次にこのようなデータベースをインスタンス化します。

  2. または、おそらく実際のデータベースオブジェクトをコンストラクターに渡すことができますが、最初のアプローチの方が優れているようです。

プログラムの学習の重要な部分は、ドキュメントを読んで理解することを学ぶことです。ドキュメントが進むにつれて、Androidドキュメントはかなり詳細であるため、それらがどのように機能するかを理解するのに本当に価値があります。

あなたが見ることができるように asynctaskドキュメント, 、ありません onCreate また onExecute anのメソッド AsyncTask.

ドキュメントは、Asynctaskの4つの主要な機能を明確に説明します。 onPreExecute(), doInBackground(Params...), onProgressUpdate(Progress...), onPostExecute(Result).

あなたのインスタンスの可能性のある選択肢は次のとおりです onPreExecute() また doInBackground(Params...). 。違いは、UIスレッドで初期化を発生させたいかどうかです。そうでない場合は、それをしてください doInBackground(Params...).

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top