我使用AsyncTask
從我創建的Web服務獲取數據。現在我想向用戶顯示正確的錯誤消息,就像互聯網不可用一樣,如果服務器關閉,它將顯示敬酒,同樣會顯示敬酒。我想在doInBackground()中設置一個錯誤類似「服務器關閉」或「網絡問題發生」的字符串,並在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
}
}
}
}
這只是一個考試PLE。你可以在ApiResponse
中放入任何你想要的東西,並組成這些數據的模型。 (如從api獲得的狀態碼,由某些轉換器生成的json響應pojo類等)。一旦數據有界,您可以在onPostExecute()
中使用它,因爲它將始終在您的UI線程上運行。請注意,AsyncTask
的第三個類型參數Result
是按照定義構建的: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. 向用戶顯示錯誤消息
- 2. Android Studio應用程序向用戶顯示錯誤消息
- 3. 如何在MVC調用Web API中向用戶顯示錯誤消息?
- 4. 如何在Javascript中向用戶顯示是/否消息框?
- 5. 如果在wix中回滾,則向用戶顯示錯誤消息
- 6. 在DataGridView中向用戶顯示錯誤
- 7. 如何在asyncTask中顯示不同的消息進度條
- 8. 如何僅在MVC3中的Ajax.BeginForm OnFailure中顯示錯誤消息?
- 9. 在PHP中顯示錯誤消息
- 10. 在窗體中顯示錯誤消息
- 11. 在laravel中未顯示錯誤消息
- 12. 在Qt/QML中顯示錯誤消息
- 13. 在html中顯示錯誤消息
- 14. 在php中顯示錯誤消息
- 15. 在rails中顯示錯誤消息
- 16. 消息框在C#中顯示錯誤
- 17. 在CodeIgniter中不顯示錯誤消息
- 18. 如何在POST + HTTP重定向後向用戶顯示消息
- 19. 在重定向的請求中顯示錯誤消息
- 20. 向用戶顯示全局/ misc錯誤消息
- 21. 如何在Android的asynctask中顯示webview?
- 22. 如何顯示無效用戶輸入的錯誤消息?
- 23. 向用戶顯示友好的消息
- 24. 如何在PHP中使用passthru顯示javac錯誤消息?
- 25. 如何使用C#在Asp.Net頁面中顯示錯誤消息?
- 26. 如何在asyncTask中顯示吐司消息doingbackground或onPostExecute
- 27. 如何在重定向上顯示錯誤消息?
- 28. AngularJs中的用戶頁面上未顯示錯誤消息
- 29. 在單獨的公共asyncTask類的活動中顯示錯誤消息
- 30. 如何在NetBeans中顯示PHP的警告和錯誤消息?
是的,你當然應該抓住所有這些例外。 – greenapps
在doInBackground()中,您不能使用Toast()。在onPostExecute()中做。 – greenapps
是的,我知道我會設置一個字符串將doInBackground()中的錯誤,並在onPostExecute()顯示吐司,但我想知道,如果我的服務器關閉,拋出什麼異常?如果我的服務器處於活動狀態,但在傳輸過程中互聯網斷開連接,引發了什麼異常? –