1

ボタンを押すことでサーバーから非同期データ同期を行うAndroidアプリがあります。ただし、ボタンをアプリのすべてのアクティビティに含める必要があるため、updateTaskをスタンドアロンクラスとして使用することにしました。

updateTaskで、いくつかのxmlデータをダウンロードします。次に、bussinesオブジェクトを使用して処理し、最後にこのbussinesオブジェクトにandroid dbへの保存(または更新)を処理させます。

ORMLiteチュートリアルに基づいて、OpenHelperManager.getHelper(context、DatabaseHelper.class)を呼び出してdatabaseHelperを取得する必要があります。私の問題は、現在持っていないOpenHelperManagerのコンテキストが必要なことです。

アクティビティのコンテキストをupdateTaskに渡すのが最善の方法だと思いますが、どうすればよいですか?また、アクティビティとは関係のないbussinesオブジェクトにコンテキストをさらに渡すのも奇妙ではありません。そして最後に:コンテキストは何ですか?それは単にアクティビティの親を表すのですか、それともより深い目的がありますか?

ありがとう :)

4

1 に答える 1

5

これを行ういくつかの方法があります。3つすべてが機能するはずですが、自分でテストしたことはありません。

方法1

コンテキストを取り込んで保存するAsyncTaskのコンストラクターを作成し、実行時に使用できるようにします。

AsyncTaskコード

public class DataProcessor extends AsyncTask<Void, Void, Void>{

    private Context mContext;

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

    @Override
    protected Void doInBackground(Void... params) {
        DataBaseHelper helper = OpenHelperManager.getHelper(mContext, DatabaseHelper.class)
        // Your code here
    }
}

実装コード(アクティビティ用)

new DataProcessor(this).execute();

方法2

executeメソッドを呼び出すときに、コンテキストを引数として渡します

AsyncTaskコード

public class DataProcessor extends AsyncTask<Context, Void, Void>{

    @Override
    protected Void doInBackground(Context... params) {

        Context context = params[0];

        DataBaseHelper helper = OpenHelperManager.getHelper(context, DatabaseHelper.class)
        // Your code here
    }
}

実装コード(アクティビティ用)

new DataProcessor().execute(this);

方法3

非同期タスクが直接アクセスできるコンテキストの静的インスタンスを用意します。これを行う方法はここにあります:Androidで「コンテキスト」を取得する静的な方法?

AsyncTaskコード

public class DataProcessor extends AsyncTask<Void, Void, Void>{

    @Override
    protected Void doInBackground(Void... params) {

        DataBaseHelper helper = OpenHelperManager.getHelper(MyApplication.getAppContext(), DatabaseHelper.class)
        // Your code here
    }
}

実装コード(アクティビティ用)

new DataProcessor().execute(this);
于 2012-12-19T23:31:51.527 に答える