onPostExecute не позволяет мне создавать сообщение Toast

См. это раньше для контекста: Anonymous Загрузка объекта File в API Imgur (JSON) дает ошибку аутентификации 401 (у него есть код для метода doInBackground(), если кому-то интересно)

Используя класс AsyncTask, я загружаю изображение в Imgur. Процесс загрузки выполняется в методе doInBackground(). Он возвращает ссылку String на onPostExecute, которая должна отображать ссылку в виде сообщения Toast.

@Override
protected void onPostExecute(String result) 
{
    super.onPostExecute(result);
    Toast.makeText(getApplicationContext(), "Uploaded! Link: " + result, Toast.LENGTH_SHORT).show();
}

Однако выполнение этого приводит к следующей ошибке:

Метод getApplicationContext() не определен для типа UploadToImgurTask

Аналогичная проблема возникает при попытке скопировать возвращаемую строку в буфер обмена.

@Override
protected void onPostExecute(String result) 
{
    super.onPostExecute(result);
    ClipboardManager clipboard = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE); 
    ClipData clip = ClipData.newPlainText("label", "Text to copy");
    clipboard.setPrimaryClip(clip);
}

Метод getSystemService(String) не определен для типа UploadToImgurTask


person Awais Imran    schedule 23.05.2013    source источник
comment
используйте контекст действия вместо getApplicationContext(). если асинтаск не является внутренним классом действия, передайте контекст конструктору асинтаска. использовать контекст для отображения всплывающего уведомления   -  person Raghunandan    schedule 24.05.2013
comment
Вы можете продемонстрировать?   -  person DSlomer64    schedule 09.09.2015


Ответы (3)


@ Рагунандан прав. Итак, внутри вашего класса UploadToImgurTask вы можете иметь:

private Context context;
//in constructor:
public UploadToImgurTask(Context context){
        this.context=context;
}

Затем в onPostExecute вы можете просто использовать:

Toast.makeText(context, "Uploaded! Link: " + result, Toast.LENGTH_SHORT).show();

Надеюсь, это поможет вам.

person Shobhit Puri    schedule 23.05.2013
comment
Красиво получилось! Спасибо вам обоим. Еще один вопрос: у меня не работает код копирования ссылки в системный буфер обмена из onPostExecute. Продолжает говорить, что getSystemService не определен для UploadToImgurTask. :( - person Awais Imran; 25.05.2013
comment
Опять же, getSystemService() является методом Context, поэтому вам нужна ссылка на объект контекста. вы можете попробовать использовать context.getSystemService(). Надеюсь, это сработает. - person Shobhit Puri; 26.05.2013

Вместо getApplicationContext() используйте имя родительского класса AsyncTask с ".this", например MyActivity.this, если оно наследуется от Activity. В противном случае используйте getActivity(). Надеюсь, ваша проблема будет решена с этим

person user2281330    schedule 23.05.2013
comment
или просто расширяет Activity - person Thamaraiselvam; 04.02.2015

попробуйте этот код

public static void pushprofList(Activity context){
 static Context = mConext;

protected void onPostExecute(String result) {

      Toast toast=Toast.makeText(mConext,"Succefully Updated Profile",Toast.LENGTH_LONG);
             toast.show();

    }
  }

это работает полностью и отображает всплывающее сообщение.

person Ashish Tikarye    schedule 05.08.2015