Android 异步任务网络错误
我正在创建一个android应用程序,该应用程序使用异步任务登录和发送数据(HTTP Post请求)。当互联网连接良好时,该应用程序工作正常,但当进行日志记录时,由于连接缓慢,需要花费太长时间发布数据,应用程序组将关闭。我想显示一个toast“连接错误”出现这种情况时,请帮助您的应用程序可能会崩溃,因为您试图在UI线程中不显示Toast。也就是说,您应该始终使用onPostExecute()方法或在onPostExecute()方法中对UI进行任何更改,onPostExecute()方法也会在UI线程中运行 如何在doInBackground的线程中捕获异常并在UI线程中表示它们是另一个问题,我可以向您建议以下解决方案:Android 异步任务网络错误,android,android-asynctask,Android,Android Asynctask,我正在创建一个android应用程序,该应用程序使用异步任务登录和发送数据(HTTP Post请求)。当互联网连接良好时,该应用程序工作正常,但当进行日志记录时,由于连接缓慢,需要花费太长时间发布数据,应用程序组将关闭。我想显示一个toast“连接错误”出现这种情况时,请帮助您的应用程序可能会崩溃,因为您试图在UI线程中不显示Toast。也就是说,您应该始终使用onPostExecute()方法或在onPostExecute()方法中对UI进行任何更改,onPostExecute()方法也会在U
private class LoginTask extends
AsyncTask<Void, Integer, JSONArray[]> {
private static final int NETWORK_NO_ERROR = -1;
private static final int NETWORK_HOST_UNREACHABLE = 1;
private static final int NETWORK_NO_ACCESS_TO_INTERNET = 2;
private static final int NETWORK_TIME_OUT = 3;
// You can continue this list...
Integer serverError = NETWORK_NO_ERROR;
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog.show(); // Don't forget to create it before
}
@Override
protected JSONArray[] doInBackground(Void... v) {
JSONArray[] result = null;
try {
result = NetworkManager.login(/* All params you need */);
} catch (JSONException e) {
return null;
} catch (ConnectException e) {
serverError = NETWORK_NO_ACCESS_TO_INTERNET;
return null;
} catch (UnknownHostException e) {
serverError = NETWORK_HOST_UNREACHABLE;
return null;
} catch (SocketTimeoutException e) {
serverError = NETWORK_TIME_OUT;
return null;
} catch (URISyntaxException e) {
// ..
return null;
} catch (ClientProtocolException e) {
// ..
return null;
} catch (Exception e) {
// ..
return null;
}
return result;
}
@Override
protected void onPostExecute(JSONArray[] result) {
progressDialog.dismiss();
if (result != null) {
processAndShowResult(result);
} else {
switch (serverError) {
case NETWORK_NO_ERROR:
Toast.makeText(YourActivity.this, "Probably, invalid response from server", Toast.LENGTH_LONG).show();
break;
case NETWORK_NO_ACCESS_TO_INTERNET:
// You can customize error message (or behavior) for different type of error
case NETWORK_TIME_OUT:
case NETWORK_HOST_UNREACHABLE:
Toast.makeText(YourActivity.this, "Error in Connection", Toast.LENGTH_LONG).show();
break;
}
}
}
}
私有类登录任务扩展
异步任务{
专用静态final int NETWORK_NO_ERROR=-1;
专用静态最终int网络\u主机\u不可访问=1;
专用静态最终int网络\u无\u访问\u互联网=2;
专用静态最终int网络超时=3;
//您可以继续此列表。。。
整型服务器错误=网络无错误;
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
progressDialog.show();//之前不要忘记创建它
}
@凌驾
受保护的JSONArray[]doInBackground(无效…v){
JSONArray[]结果=null;
试一试{
结果=NetworkManager.login(/*您需要的所有参数*/);
}捕获(JSONException e){
返回null;
}捕获(连接异常){
serverError=网络\u无\u访问\u互联网;
返回null;
}捕获(未知后异常e){
serverError=网络\主机\无法访问;
返回null;
}捕获(SocketTimeoutException e){
serverError=网络超时;
返回null;
}捕获(URISyntaxException e){
// ..
返回null;
}捕获(客户端协议例外e){
// ..
返回null;
}捕获(例外e){
// ..
返回null;
}
返回结果;
}
@凌驾
受保护的void onPostExecute(JSONArray[]结果){
progressDialog.disclose();
如果(结果!=null){
processAndShowResult(结果);
}否则{
交换机(服务器错误){
案例网络无错误:
Toast.makeText(YourActivity.this,“可能来自服务器的响应无效”,Toast.LENGTH_LONG.show();
打破
案例网络\u无\u访问\u互联网:
//您可以为不同类型的错误自定义错误消息(或行为)
案例网络超时:
案例网络\主机\无法访问:
Toast.makeText(YourActivity.this,“连接错误”,Toast.LENGTH_LONG.show();
打破
}
}
}
}
通过这种方式,您可以灵活地控制网络错误,并根据这些错误采取适当的措施。我建议您在问题中添加android标签