Изящно обрабатывать IOException внутри AsyncTask? - PullRequest
0 голосов
/ 14 июля 2011

Как изящно отобразить Toast, когда IOException происходит внутри doInBackground AsyncTask?

Ответы [ 3 ]

2 голосов
/ 14 июля 2011

Вы можете переопределить либо onPostExecute, либо onProgressUpdate для отображения сообщений в потоке пользовательского интерфейса.

Чтобы использовать onProgressDisplay, объявите второй тип как String при расширении AsyncTask:

private class YourTask extends AsyncTask<ParamType, String, ReturnType> {

и переопределить onProgressUpdate:

protected void onProgressUpdate(String... progress) {
     String errMsg = progress[0];
     Toast.makeText(getApplicationContext(), errMsg, Toast.LENGTH_SHORT).show();
}

тогда вы можете вызвать функцию "progress", когда ваше исключение возникает в doInBackground:

protected ReturnType doInBackground(ParamType... params) {
     try {
         // do stuff
     } catch (IOException e) {
        publishProgress("My Error Msg goes here");
     }
     return result;
 }
1 голос
/ 14 июля 2011

Так же, как это:

Toast.makeText(Context context, int resId, int duration).show();

Ему нужен контекст, поэтому просто передайте его AsyncTask. Дополнительная информация .

0 голосов
/ 22 апреля 2016

Грязным способом является создание другого результата в вашем IOException, например, если нет подключения к Интернету, вы можете проверить подключение в вашем IOException и установить свой результат, если соединение существует, в result = 'connection_to_server_issue'. Если нет соединения, результат = 'no_connection'.

И позже в вашем postExecution вы можете сначала проверить свой результат, если он равен одной из этих двух строк, и если это так, просто выполнить сообщение toast, или что вы хотите сделать, если произойдет одна из этих ошибок.

...