Android AsyncTask 访问 Activity Context 的更好方式

标签 android android-asynctask

我花了很长时间才让它起作用,但这显然不是最佳实践。简而言之,我需要在我的 AsyncTask 完成时显示一个对话框,但 getApplicationContext() 不起作用,在创建 AsyncTask 时也不会将其作为参数传递。所以我在我的 AsyncTask 类中为上下文声明了一个公共(public)变量,并在我执行之前设置它:

    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

谁能告诉我传递上下文的正确方法?

谢谢

最佳答案

定义一个构造函数方法并向上下文传递一个参数。会更好。

我的意思是:

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

}

就这些。

关于Android AsyncTask 访问 Activity Context 的更好方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12214364/

相关文章:

android - 无法解析符号 PhoneNumberUtil

android - 如何在主线程之外执行和接收来自 AsyncTasks 的结果?

java - Android 如何使用 Caldroid Lib 中异步任务的数据填充日历

android - 当前位置未在 android 中拾取

java - 如何将 HTTPClient 移至异步任务

java - Android:如何在主要 Activity 的变量中存储值(value)?

android - 如何使用 AsyncTask 获取位置

android - 为什么我在简单地执行 setContentView(R.layout.somelayout) 时会出现内存泄漏?

java - 从配置的网络中删除网络并启用所有其他网络

java - 为什么在调试 android google maps 示例时不调用我的 onLocationChanged() 方法?