私はAsyncTask
を使用して、作成したWebサービスのデータ形式を取得しています。今私は、インターネットが利用できない場合と同様に、サーバーがダウンしている場合は、それのためにトーストを表示するためのトーストを表示しますように、ユーザーに適切なエラーメッセージを表示したい。 doInBackground()で "server is down"や "internet problem occured"のようなエラーの文字列を設定し、onPostExecute()でToastを表示したいのですが、私のサーバがダウンしていれば何の例外がスローされているか知りたいですか?私のサーバがアクティブであるが転送中にインターネットが切断された場合、どのような例外がスローされますか?AndroidでAsyncTaskのエラーメッセージをユーザーに表示するにはどうすればいいですか?
2
A
答えて
0
おそらく応答をモデリングするのが最も簡単で簡単な方法です。その後
class ApiResponse {
public final String responseString;
public final Throwable error;
public ApiResponse (String responseString,Throwable error){
this.responseString = responseString;
this.error = error;
}
}
、あなたがそのモデルへの応答やエラーを結合して、doInBackground();
から返すことができます:あなたは、データからモデルを作成することができ
例えば
は、次のようなです擬似コード:class ApiAsyncTask extends AsyncTask<Void, Void, ApiResponse> {
....
protected ApiResponse doInBackground() {
try {
//callApi and get response, if success pass null in error
return new ApiResponse(responseString, null)
} catch (Exception e) {
e.printStackTrace();
//otherwise pass that error
return new ApiResponse(null, e);
}
}
protected void onPostExecute(ApiResponse apiResponse) {
//now just need to check if error is null
if (error == null) {
String json = apiResponse.responseString;
//parse response
} else {
//get error and check with instanceOf
Throwable error = apiResponse.error;
if (error instanceOf SocketTimeoutException){
//show timeout error
}
else if (error instanceOf SomeXYZException){
//handle that exception
}
}
}
}
これは単なる試験ですプレ希望するものをApiResponse
に入れ、そのデータのモデルを作成することができます。 (ステータスコードはapiから取得し、何らかのコンバータなどによってjson応答のpojoクラスを生成したものなど)。データをバインドしたら、onPostExecute()
で使用できます。これは、常にUIスレッドで実行されるためです。第3のタイプのパラメータResult
がAsyncTask
であることは、定義のために、AsyncTask<Params, Progress, Result>
のために構築されていることに注意してください。
0
あなたdoInBackground()
文字列へとよりのキャッチ例外は、あなたが必要なものによって異なり、あなたは、onPostExecute()
方法から、このような何かトーストメッセージを表示することができます。もちろん
@Override
protected Void doInBackground(Void... arg0) {
try {
// do you stuff here
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
response = "UnknownHostException: " + e.toString();
} catch (IOException e) {
e.printStackTrace();
response = "IOException: " + e.toString();
} finally {
...
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
protected void onPostExecute(Void result) {
if (response.contains("IOException: java.net.ConnectException:")) {
Toast.makeText(getApplicationContext(), "YOUR TEXT HERE", Toast.LENGTH_SHORT).show();
mProgressDialog.dismiss();
}
else if (response.contains("IOException: java.net.SocketTimeoutException:")) {
Toast.makeText(getApplicationContext(), "YOUR TEXT HERE", Toast.LENGTH_SHORT).show();
mProgressDialog.dismiss();
}
else if (response.contains("IOException: java.net.SocketException:")) {
Toast.makeText(getApplicationContext(), "YOUR TEXT HERE", Toast.LENGTH_SHORT).show();
mProgressDialog.dismiss();
}
}
を、これは一例yustですが、それがどのように働くか見ることができます。
関連する問題
- 1. android studioのAsyncTaskに適切なエラーメッセージを設定するにはどうすればいいですか?
- 2. シンプルメンバーシップ - 登録していないユーザーのエラーメッセージを表示するにはどうすればいいですか?
- 3. PHPでエラーメッセージを表示するにはどうすればよいですか?
- 4. エラーメッセージをユーザーに表示するWebClientレスポンスを処理するにはどうすればよいですか?
- 5. Androidでビデオを表示するにはどうすればいいですか?
- 6. Android SeekBarを表示するにはどうすればいいですか?
- 7. Androidでマーカーを表示するにはどうすればよいですか?
- 8. Androidでチルトマップを表示するにはどうすればよいですか?
- 9. Androidでダイアログを表示するにはどうすればよいですか?
- 10. Androidでログメッセージを表示するにはどうすればよいですか?
- 11. イベントログにわかりやすいエラーメッセージを表示するにはどうすればよいですか?
- 12. RのUI要素の近くにエラーメッセージを表示するにはどうすればいいですか?
- 13. firebaseからerror2アプリケーションにエラーメッセージを表示するにはどうすればいいですか?
- 14. 継承のないカスタムエラーページにエラーメッセージを表示するにはどうすればよいですか?
- 15. jqueryの検証エラーメッセージをポップアップに表示するにはどうすればいいですか?
- 16. Liferayポータルにエラーメッセージを表示するにはどうすればいいですか?
- 17. asynctaskを使用してカウントダウンするプログレスバーを表示するにはどうすればよいですか?
- 18. 「インクルードファイル」がユーザーに表示されないようにするにはどうすればよいですか?
- 19. Androidでフォームを表示/非表示にするにはどうすればよいですか?
- 20. AndroidのToastのようにBlackberryにクイックメッセージを表示するにはどうすればいいですか?
- 21. json応答をユーザーに表示しないようにするにはどうすればよいですか?
- 22. Androidで「ソフトキーの表示/非表示」イベントをキャプチャするにはどうすればよいですか?
- 23. DelphiのDBXトランザクションでSQLエラーメッセージを表示するにはどうすればよいですか?
- 24. mdl-textfieldのエラーメッセージをプログラムで表示するにはどうすればよいですか?
- 25. divにファインアップローダーのエラーメッセージを表示するにはどうすればよいですか?
- 26. セッションに基づいてユーザーのクレジットを表示するにはどうすればいいですか?
- 27. 異なる場所に検証エラーメッセージを表示するにはどうすればよいですか?
- 28. ButtonコールバックアクションをAsyncTaskクラスに渡すにはどうすればいいですか?
- 29. ログインしているユーザーからオプトインスクリプトを非表示にするにはどうすればよいですか?
- 30. iPhoneアプリでEULAをユーザーに表示するにはどうすればいいですか?
はい、もちろん、これらの例外をすべてキャッチする必要があります。 – greenapps
doInBackground()ではToast()を使用できません。 onPostExecute()でそれを行います。 – greenapps
はい私はdoInBackground()に文字列エラーを設定し、onPostExecute()でトーストを表示することを知っていますが、私のサーバーがダウンしている場合には何の例外がスローされるかを知りたいですか?私のサーバがアクティブであるが転送中にインターネットが切断された場合、どのような例外がスローされますか? –