public String urltobody(String createdurl){ 
            URL url = new URL (createdurl); 
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            int responseCode = connection.getResponseCode();//fails here
            if (responseCode == HttpURLConnection.HTTP_OK) { 
                InputStream is = connection.getInputStream();
                String content = convertInputStream(is, "UTF-8"); 
                is.close();
                return content;
            }
    }

如果我在doInBackground内部调用上述函数,则该函数起作用,但在onPostExecute中不起作用。 我真的需要独立于此之前,之后,之后调用此函数。

这是我的类定义private class FetchTask extends AsyncTask < Void, Void, String>

如果您可以解决以下问题之一,请告诉我。

您知道如何在doInbackground之外调用函数吗?

您知道我调用new FetchTask()。execute()时会发生什么吗?

还有其他解决方案吗?

先感谢您

===============>>#1 票数:0 已采纳

原因是doInBackground后台线程中运行,而onPreExectute onPostExecuteUI线程中运行。

==>不应从UI线程完成 URL连接(因为它可能会在加载UI时冻结UI),这就是Android每当尝试执行该操作时都会引发NetworkOnMainThreadException的原因。

==>这就是为什么您应该仅从后台线程而不是UI线程异步建立网络连接的原因。 这就是为什么它仅在doInBackground中起作用的原因。

===============>>#2 票数:0

您可以尝试此代码

private class FetchTask extends AsyncTask<Void, Void, Boolean>

代替

private class FetchTask extenends AsyncTask < Void, Void, String>

可能会解决您的问题。

也可以举例说明

private class ResponseLocDepts extends AsyncTask<Void, Void, Boolean> {
        @Override
        protected Boolean doInBackground(Void... params) {
                URL url = new URL (createdurl); 
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        int responseCode = connection.getResponseCode();//fails here
        if (responseCode == HttpURLConnection.HTTP_OK) { 
            InputStream is = connection.getInputStream();
            String content = convertInputStream(is, "UTF-8"); 
            is.close();
            return true;
        }
       else
        {
         return false;
         }

        }

        @Override
        protected void onPostExecute(final Boolean success) {
                // somethings

        }

    }

字符串内容应全局声明。 请尝试一下。

  ask by Nikh translate from so

未解决问题?本站智能推荐: