Подтвердить что ты не робот

Как передать контекст в AsyncTask?

Я хочу заархивировать a Toast, когда фоновая задача будет завершена, чтобы сообщить пользователю, что она закончилась.

Я создал новый класс для моей asyncTask, но я не могу использовать getApplicationContext() в этом классе.

Я использую task.execute(getTempFile(this), getApplicationContext()); для запуска задач. getTempFile возвращает объект File, и я пытался передать контекст в качестве объекта Context.

В классе My Task есть 3 переменные AsyncTask<Object, Integer, Integer>, поэтому контекст находится во втором объекте. Однако это приводит к сбою приложения.

Edit

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

}
4b9b3361

Ответ 1

Передайте объект Context в конструктор AsyncTask.

Пример кода:

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

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

а затем, когда вы создаете свой AsyncTask:

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

Ответ 2

Передайте его в конструкторе, а не как параметр метода. Тогда вам не нужно зависеть от общих параметров.

Ответ 4

Вы говорите, что ваш контекст находится во втором объекте, но ваш второй объект - Integer. Это может быть вашей проблемой? Кроме того, еще одно предложение состоит в том, чтобы поместить ваш класс AsyncTask в качестве частного внутреннего класса для вашей деятельности - таким образом, я уверен, что у вас будет доступ к getApplicationContext().