无法理解 Android 应用程序使用 AsyncTask 的错误日志
Can't understand error log for Android app using AsyncTask
任何人都可以详细说明这些错误日志条目:
W/System.err(8537): at com.any.sales.Alerts.toast(Alerts.java:14)
W/System.err(8537): at com.any.sales.SalesHandler.startStalesSync(SalesHandler.java:31)
W/System.err(8537): at com.any.sales.Start.act(Start.java:55)
W/System.err(8537): at com.any.sales.Start.onCreate(Start.java:23)
W/System.err(8537): at com.any.sales.Alerts.toast(Alerts.java:14)
W/System.err(8537): at com.any.sales.HttpCall.onPostExecute(HttpCall.java:103)
W/System.err(8537): at com.any.sales.HttpCall.onPostExecute(HttpCall.java:22)
我的应用程序不断崩溃,ADB 日志除此之外没有显示任何其他错误日志。而且我无法理解这些条目试图表达的意思。
我正在制作一个应用程序,它的 Http class 类似于 HttpPost、HttpClient、HttpResponse 以连接到在线服务器并获取数据。为此,我创建了一个 class HttpCall 并扩展了 AsyncTask。我使用这个 class 有一段时间了,它在我的所有项目中都能完美地工作,但现在不知何故它无法正常工作。
我正在为异常执行 printStackTrace,我看到的所有错误日志条目。如果我能理解这些条目试图说明的内容,我就可以纠正问题。如您所见,它们只是函数名称的引用,class 名称行号,没有其他消息可以告诉您错误实际上是什么。这是我的 HttpCall Class:
public class HttpCall extends AsyncTask<Void, Void, String> {
String url;
List<NameValuePair> params;
AsyncResponse delegate = null;
public HttpCall(String url, List<NameValuePair> params, AsyncResponse responseDelegate) {
this.url = url;
this.params = params;
this.delegate = responseDelegate;
}
private String post(String url, List<NameValuePair> params) {
// Data Objects
UrlEncodedFormEntity entity;
HttpPost post;
HttpClient client;
HttpResponse response;
BufferedReader reader;
StringBuilder builder;
String line;
try {
// Set Parameters
entity = new UrlEncodedFormEntity(params);
// Set Request
post = new HttpPost(url);
post.setEntity(entity);
// Execute Request through Http Client and Store the response
client = new DefaultHttpClient();
response = client.execute(post);
// Read Response to the buffer
reader = new BufferedReader(
new InputStreamReader(
response.getEntity().getContent()
)
);
builder = new StringBuilder("");
while ((line = reader.readLine()) != null) {
builder.append(line);
}
reader.close();
return builder.toString();
} catch (ConnectTimeoutException ex) {
ex.printStackTrace();
return "Unable to process request"
+ "\nDue to a very slow or no active Internet"
+ "\nPlease try again in few seconds..";
} catch (NoHttpResponseException ex) {
ex.printStackTrace();
return "No Response from Server. Please try again in few seconds..";
} catch (IOException ex) {
ex.printStackTrace();
return "Error in IO";
} catch (Exception ex) {
ex.printStackTrace();
return "Unknown Connection Error";
}
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(Void... voids) {
try {
return post(this.url, this.params);
} catch (Exception ex) {
ex.printStackTrace();
return ex.getMessage();
}
}
@Override
protected void onPostExecute(String result) {
try {
super.onPostExecute(result);
if (delegate != null)
delegate.onFinish(result);
} catch (Exception ex) {
ex.printStackTrace();
Alerts.toast(ex.getMessage());
}
}
}
这是我的 AsyncResponse class 用于在 AsyncTask 的 onPostExecute 中执行
public interface AsyncResponse {
void onFinish(String output);
}
我解决了我的问题。有趣的是,它与 Http 或 Async 等任何事物都无关。这次我不是通过使用 Toast.makeText
而是通过使用 new Toast() 来调用吐司,这会引发异常。
奇怪的是 printStackTrace
没有显示这个。
任何人都可以详细说明这些错误日志条目:
W/System.err(8537): at com.any.sales.Alerts.toast(Alerts.java:14)
W/System.err(8537): at com.any.sales.SalesHandler.startStalesSync(SalesHandler.java:31)
W/System.err(8537): at com.any.sales.Start.act(Start.java:55)
W/System.err(8537): at com.any.sales.Start.onCreate(Start.java:23)
W/System.err(8537): at com.any.sales.Alerts.toast(Alerts.java:14)
W/System.err(8537): at com.any.sales.HttpCall.onPostExecute(HttpCall.java:103)
W/System.err(8537): at com.any.sales.HttpCall.onPostExecute(HttpCall.java:22)
我的应用程序不断崩溃,ADB 日志除此之外没有显示任何其他错误日志。而且我无法理解这些条目试图表达的意思。
我正在制作一个应用程序,它的 Http class 类似于 HttpPost、HttpClient、HttpResponse 以连接到在线服务器并获取数据。为此,我创建了一个 class HttpCall 并扩展了 AsyncTask。我使用这个 class 有一段时间了,它在我的所有项目中都能完美地工作,但现在不知何故它无法正常工作。
我正在为异常执行 printStackTrace,我看到的所有错误日志条目。如果我能理解这些条目试图说明的内容,我就可以纠正问题。如您所见,它们只是函数名称的引用,class 名称行号,没有其他消息可以告诉您错误实际上是什么。这是我的 HttpCall Class:
public class HttpCall extends AsyncTask<Void, Void, String> {
String url;
List<NameValuePair> params;
AsyncResponse delegate = null;
public HttpCall(String url, List<NameValuePair> params, AsyncResponse responseDelegate) {
this.url = url;
this.params = params;
this.delegate = responseDelegate;
}
private String post(String url, List<NameValuePair> params) {
// Data Objects
UrlEncodedFormEntity entity;
HttpPost post;
HttpClient client;
HttpResponse response;
BufferedReader reader;
StringBuilder builder;
String line;
try {
// Set Parameters
entity = new UrlEncodedFormEntity(params);
// Set Request
post = new HttpPost(url);
post.setEntity(entity);
// Execute Request through Http Client and Store the response
client = new DefaultHttpClient();
response = client.execute(post);
// Read Response to the buffer
reader = new BufferedReader(
new InputStreamReader(
response.getEntity().getContent()
)
);
builder = new StringBuilder("");
while ((line = reader.readLine()) != null) {
builder.append(line);
}
reader.close();
return builder.toString();
} catch (ConnectTimeoutException ex) {
ex.printStackTrace();
return "Unable to process request"
+ "\nDue to a very slow or no active Internet"
+ "\nPlease try again in few seconds..";
} catch (NoHttpResponseException ex) {
ex.printStackTrace();
return "No Response from Server. Please try again in few seconds..";
} catch (IOException ex) {
ex.printStackTrace();
return "Error in IO";
} catch (Exception ex) {
ex.printStackTrace();
return "Unknown Connection Error";
}
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(Void... voids) {
try {
return post(this.url, this.params);
} catch (Exception ex) {
ex.printStackTrace();
return ex.getMessage();
}
}
@Override
protected void onPostExecute(String result) {
try {
super.onPostExecute(result);
if (delegate != null)
delegate.onFinish(result);
} catch (Exception ex) {
ex.printStackTrace();
Alerts.toast(ex.getMessage());
}
}
}
这是我的 AsyncResponse class 用于在 AsyncTask 的 onPostExecute 中执行
public interface AsyncResponse {
void onFinish(String output);
}
我解决了我的问题。有趣的是,它与 Http 或 Async 等任何事物都无关。这次我不是通过使用 Toast.makeText
而是通过使用 new Toast() 来调用吐司,这会引发异常。
奇怪的是 printStackTrace
没有显示这个。