6

これが機能するまでにはかなりの時間がかかりましたが、明らかにベストプラクティスではありません。つまり、AsyncTaskが終了したときにダイアログを表示する必要がありますが、getApplicationContext()が機能せず、AsyncTaskの作成時にパラメーターとして渡すこともできません。そのため、AsyncTaskクラスでコンテキストのパブリック変数を宣言し、実行する前に設定しました。

    private OnClickListener clickLoadRefs = new OnClickListener() {
    @Override
    public void onClick(View v) {
        Log.d("H","Clicked Load Refs");
        RefreshRefPoints refreshRefPoints = new RefreshRefPoints();
        refreshRefPoints.myCtx=v.getContext();
        refreshRefPoints.execute(v.getContext());
    }
};

private class RefreshRefPoints extends AsyncTask<Context, Integer, Integer> {

    private Integer nPoints=0;
    public Context myCtx;
    private ProgressDialog pd;

    protected Integer doInBackground(Context... ctx) {
        Log.d("H","doInBackground()");
        dbHelper.clearRefPoints();
        requestRefPoints();
        nPoints = parseRefPointsCSV();

        return nPoints;
    }

    protected void onProgressUpdate(Integer... progress) {
    }

    protected void onPreExecute() 
    {
        pd = ProgressDialog.show(myCtx, "Refreshing Reference Points", "Loading...", true,false);
        Log.d( "H", "onPreExecute()" );
    }
    protected void onPostExecute(Integer result) {
        pd.dismiss();
        AlertDialog.Builder builder = new AlertDialog.Builder(myCtx);
        builder.setTitle("Reference points refresh complete");
        builder.setMessage(result+" records loaded");
        builder.setPositiveButton("OK",null);
        builder.show();
        Log.d("H","onPostExecute()");       
    }...etc

誰かが私にコンテキストを渡す適切な方法を教えてもらえますか?

ありがとう

4

3 に答える 3

12

コンストラクターメソッドを定義し、コンテキストにパラメーターを渡します。それが良いだろう。

ここで私が意味したこと:

private class RefreshRefPoints extends AsyncTask<Void, Integer, Integer> {

    private Integer nPoints=0;
    private Context myCtx;
    private ProgressDialog pd;

    public RefreshRefPoints(Context ctx){
        // Now set context
        this.myCtx = ctx;
    }

}

それで全部です。

于 2012-08-31T11:30:56.867 に答える
10

YourActivityName.thisアクティビティを参照するために使用することもできますContext。ActivitesはContextを拡張するので、そうすることは有効です。

于 2012-08-31T11:49:47.903 に答える
2

コンストラクターでコンテキストを次のように渡します

private OnClickListener clickLoadRefs = new OnClickListener() {
    @Override
    public void onClick(View v) {
        Log.d("H","Clicked Load Refs");
        RefreshRefPoints refreshRefPoints = new RefreshRefPoints(Your_ActivityName.this);
        refreshRefPoints.myCtx=v.getContext();
        refreshRefPoints.execute(v.getContext());
    }
};


private class RefreshRefPoints extends AsyncTask<Void, Integer, Integer> {

    private Integer nPoints=0;
    public Context myCtx;
    private ProgressDialog pd;

public RefreshRefPoints (Context ctx) {
    myCtx = ctx;
}
于 2012-08-31T11:29:17.790 に答える