2014-10-02 73 views
1

崩溃是:java.lang.RuntimeException: An error occured while executing doInBackground()在client.execute(httpGet)上的doInBackground()行上发生崩溃。为什么?

为什么我在这里遇到HttpResponse response = client.execute(httpGet);行?它与我的ThreadPolicy有什么关系?

从我的片段我称之为:

new ReadJSONFeedMainTask().execute(urlString); 

.... 

private class ReadJSONFeedMainTask extends AsyncTask<String, Void, String> { 
     protected String doInBackground(String... urls) { 
      return Helper.readJSONFeed(urls[0]); 
     } 

     protected void onPostExecute(String result) { 
     // do stuff 
     } 
    } 
} 

那么它在这里被称为:

public static String readJSONFeed(String URL) { 

    ThreadPolicy tp = ThreadPolicy.LAX; 
    StrictMode.setThreadPolicy(tp); 

    String numberValue = URL.replaceAll(" ", "%20"); 

    StringBuilder stringBuilder = new StringBuilder(); 
    HttpClient client = new DefaultHttpClient(); 
    HttpGet httpGet = new HttpGet(numberValue); 
    try { 
     HttpResponse response = client.execute(httpGet); 
     StatusLine statusLine = response.getStatusLine(); 
     int statusCode = statusLine.getStatusCode(); 
     if (statusCode == 200) { 
      HttpEntity entity = response.getEntity(); 
      InputStream content = entity.getContent(); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(content)); 
      String line; 
      while ((line = reader.readLine()) != null) { 
       stringBuilder.append(line); 
      } 
     } else { 
      Log.e("JSON", "Failed to download file"); 
     } 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return stringBuilder.toString(); 
} 

堆栈跟踪:

java.lang.RuntimeException: An error occured while executing doInBackground() 
1 at android.os.AsyncTask$3.done(AsyncTask.java:299) 
2 at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 
3 at java.util.concurrent.FutureTask.setException(FutureTask.java:219) 
4 at java.util.concurrent.FutureTask.run(FutureTask.java:239) 
5 at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
6 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
7 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
8 at java.lang.Thread.run(Thread.java:856) 
9Caused by: com.splunk.mint.network.util.DelegationException: java.net.ConnectException: failed to connect to 50-89-72-86.res.bhn.net/50.89.72.86 (port 80): connect failed: ETIMEDOUT (Connection timed out) 
10 at com.splunk.mint.network.util.Delegator.invoke0(Delegator.java:62) 
11 at com.splunk.mint.network.util.Delegator.invoke(Delegator.java:45) 
12 at com.splunk.mint.network.socket.MonitoringSocketImpl.connect(MonitoringSocketImpl.java:118) 
13 at java.net.Socket.connect(Socket.java:842) 
14 at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119) 
15 at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144) 
16 at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
17 at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
18 at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 
19 at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
20 at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
21 at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
22 at com.sortitapps.movies.Helper.readJSONFeed(Helper.java:1282) 
23 at com.sortitapps.movies.MainFragment$ReadJSONFeedMainTask.doInBackground(MainFragment.java:680) 
24 at com.sortitapps.movies.MainFragment$ReadJSONFeedMainTask.doInBackground(MainFragment.java:678) 
25 at android.os.AsyncTask$2.call(AsyncTask.java:287) 
26 at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
27 ... 4 more 
28Caused by: java.net.ConnectException: failed to connect to 50-89-72-86.res.bhn.net/50.89.72.86 (port 80): connect failed: ETIMEDOUT (Connection timed out) 
29 at libcore.io.IoBridge.connect(IoBridge.java:114) 
30 at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 
31 at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459) 
32 at java.lang.reflect.Method.invokeNative(Native Method) 
33 at java.lang.reflect.Method.invoke(Method.java:511) 
34 at com.splunk.mint.network.util.Delegator.invoke0(Delegator.java:56) 
35 ... 20 more 
36Caused by: libcore.io.ErrnoException: connect failed: ETIMEDOUT (Connection timed out) 
37 at libcore.io.Posix.connect(Native Method) 
38 at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85) 
39 at libcore.io.IoBridge.connectErrno(IoBridge.java:127) 
40 at libcore.io.IoBridge.connect(IoBridge.java:112) 
+0

发布您的堆栈跟踪。 – kcoppock 2014-10-02 15:17:45

+0

你的Asynctask在哪里? – Jorgesys 2014-10-02 15:20:00

+0

为您添加的信息 – 2014-10-02 15:25:21

回答

1

看起来很清楚,堆栈跟踪的结束表示连接超时。您的服务器无法访问。

+0

是的,你是对的,别人指出,我的眼睛只是集中在我的代码所在的堆栈跟踪部分。在这段代码中处理超时连接的正确方法是什么? – 2014-10-02 15:36:27

+0

Timeout实际上是一个java.net.ConnectException,它是一个IOException,但在你的情况下,它触发了一个com.splunk.mint.network.util.DelegationException(我不知道splunk)。这个不是在你的try catch块中处理的。 – ToYonos 2014-10-02 15:56:38

6

从BugSense更新到Splunk Mint后,我遇到了同样的问题,并且我的代码没有任何问题。在我注释掉Splunk.init(...)方法调用后,所有事情都开始重新开始。问题只发生在HTC设备上,并启用了Splunk Mint - 所有HttpClient#execute()方法的调用都抛出了DelegationException。不知道这是否是你的情况,但也许我的答案会帮助与我一样的问题的人。

+5

这是问题的正确来源。 Splunk lib有一个称为“网络监控”的功能,显然它有问题,并导致任何网络故障抛出他们的委托异常。 更多信息埋在他们的文档:http://docs.splunk.com/Documentation/MintSDKs/latest/SplunkMINTSDKs/DisablenetworkmonitoringforAndroid 你可以通过调用禁用它'Mint.disableNetworkMonitoring()'立即呼叫之前为' Mint.initAndStartSession()' – drc 2014-10-28 21:04:59

+0

你使用哪个版本的lib?为什么从你的经验中得到一些错误? – 2014-11-23 14:32:40

+0

我认为它也得到了报道,但不应该真正的应用程序崩溃。 – MSaudi 2014-12-23 20:00:01

相关问题