【问题标题】:Can't understand error log for Android app using AsyncTask无法理解使用 AsyncTask 的 Android 应用程序的错误日志
【发布时间】:2017-01-04 15:16:51
【问题描述】:

谁能详细说明这些错误日志条目:

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 日志没有显示除此之外的任何其他错误日志。而且我无法理解这些条目想要表达的意思。

我正在制作一个应用程序,它使用 HttpPost、HttpClient、HttpResponse 等 Http 类连接到在线服务器并获取数据。为此,我创建了一个类 HttpCall 并扩展了 AsyncTask。我使用这个类已经有一段时间了,它在我所有的项目中都能完美地工作,但现在不知何故它不能正常工作。

我正在为异常执行 printStackTrace,我看到的所有条目都是错误日志。如果我能理解这些条目试图说明什么,我可以纠正这个问题。如您所见,它们只是对函数名、类名行号的引用,没有其他消息可以告诉您实际上是什么错误。这是我的 HttpCall 类:

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 类,用于在 AsyncTask 的 onPostExecute 中执行

public interface AsyncResponse {
void onFinish(String output);
}

【问题讨论】:

    标签: android android-asynctask error-log


    【解决方案1】:

    我解决了我的问题。有趣的是它与 Http 或 Async 之类的东西无关。这次我不是使用 Toast.makeText 而是使用 new Toast() 来调用 toast,这会引发异常。

    奇怪的是printStackTrace 没有显示这个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-05
      • 2011-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多