我在调用URLconnection时收到ANR

时间:2017-05-27 15:58:41

标签: java android urlconnection

编辑:这是在AsyncTask中运行的,我应该提到这一点。

我在这个代码块上收到了很多ANR:

    URL url = new URL(sURL);
        URLConnection connect = url.openConnection();
        connect.setConnectTimeout(R.integer.timeoutLengthWithACapitalT);
        connect.setReadTimeout(R.integer.timeoutLengthWithACapitalT);
        BufferedReader in = new BufferedReader(new InputStreamReader(connect.getInputStream())); //Problem Line

R.integer.timeoutLengthWithACapitalT是1000

我不知道造成这种情况的原因,我相信它应该超时。但是,我得到了ANR的堆栈跟踪。

堆栈跟踪: https://pastebin.com/hwJhGfVX

1 个答案:

答案 0 :(得分:0)

您应该在主线程中运行网络呼叫。我更喜欢使用AsyncTask进行所有网络调用。您可以使用以下代码段

private class MyAsyncTask extends AsyncTask<URL, Integer, Long> {
     protected Long doInBackground(URL... urls) {
         //your main network call code
         return result; //this return will invoke onProgressCompleted
     }

     protected void onPreExecute() {
        //network call in progress, you can show a loaded here if you want
     }

     protected void onPostExecute(Long result) {
        //Once network call is completed
     }
 }

您还可以查看Android文档以获取更多详细信息 https://developer.android.com/reference/android/os/AsyncTask.html