java - 如何将上下文传递给 AsyncTask?

标签 java android android-asynctask

我想预演 Toast当后台任务完成时,只是为了让用户知道它已经完成。

我为我的 asyncTask 创建了一个新类,但我无法使用 getApplicationContext()在这个类中。

我正在使用 task.execute(getTempFile(this), getApplicationContext());运行任务。 getTempFile 返回一个 File 对象,我试图将上下文作为 Context 对象传递。

我的任务类有 3 个变量 AsyncTask<Object, Integer, Integer>所以上下文在第二个对象中。但是,这会使应用程序崩溃。

编辑

public class LocationActivity extends Activity implements LocationListener {
    protected void handleImage(Bitmap thumbnail){
        PushDataToServer task = new PushDataToServer();
        task.execute(getTempFile(this), getApplicationContext());
    }
}




public class PushDataToServer extends AsyncTask<Object, Integer, Integer> {

    Context context;

    @Override
    protected Integer doInBackground(Object... params) {
        // TODO Auto-generated method stub
        this.context = (Context) params[1];
        File file = (File) params[0];
        return null;
    }

    protected void onPostExecute(String result) {   
         Toast toast = Toast.makeText(this.context, "All done!", Toast.LENGTH_SHORT);
         toast.show();
    }

}

最佳答案

Context 对象传递给 AsyncTask 的构造函数。

示例代码:

public class MyTask extends AsyncTask<?, ? ,?> {
    private Context mContext;

    public MyTask(Context context) {
        mContext = context;
    } 
}

然后,当您构建 AsyncTask 时:

MyTask task = new MyTask(this);
task.execute(...);

关于java - 如何将上下文传递给 AsyncTask?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7066264/

相关文章:

java - java swing应用程序中的快速搜索?

java - GUI 上的按钮有什么问题

java - 使用 Lambda 表达式的线程

java - 通过socket-framework连接手机和电脑

java - Firebase Android : how do I access params nested in data via RemoteMessage?

android - 致命异常 : java. lang.NoClassDefFoundError: rt

Android,从MySQL读取数据后,listview在屏幕显示关闭后填充

Android:从服务中的 onPostexecute AsyncTask 获取结果

Android:使用 Admob 的 Consent SDK 获取用户的位置

java - Android 使用 Ksoap 作为 AsyncTask 解析变量并获取返回值