2016-08-28 3 views
0

を使用してAndroidアプリのエラーログを理解することはできません誰もがこれらのエラー・ログ・エントリについて私に手の込んだてくださいすることができ:が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ログはこの除き、他のエラーログが表示されないで続けます。そして、私はこれらのエントリーが何を言おうとしているのか理解できません。

私は、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()); 
    } 
} 
} 

これは私が私の問題を修正しAsyncTask

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

答えて

0

を実行するための私のAsyncResponseクラスです。面白いことに、HttpやAsyncのようなものには関係しません。今回私はToast.makeTextを使用するのではなく、新しいToast()を使用してトーストを呼び出していましたが、これは例外をスローしていました。

奇妙なことは、printStackTraceはこれについて表示されていません。