繁体   English   中英

HTTP获取Android异步任务

[英]http get in android async task

当我实现这一点时,它说“ NetworkOnMainThreadException”。

有人可以张贴一个有效的例子吗?

我尝试了许多不同的示例和库,但是没有用。 我的代码:

private class HttpGetter extends AsyncTask<URL, Void, Void> {

    @Override
    protected Void doInBackground(URL... urls) {
        // TODO Auto-generated method stub
        StringBuilder builder = new StringBuilder();
        HttpClient client = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(String.valueOf(urls[0]));

        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) {
                    builder.append(line);
                }
                Log.v("Getter", "Your data: " + builder.toString()); //response data
            } else {
                Log.e("Getter", "Failed to download file");
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }


}

你怎么称呼这个类对象。 如果您这样拨打电话,则不应获得该异常。

new HttpGetter().excute(new URL("http://www.urlstring.com"));

或者,您可以毫无例外地使用下面的代码运行代码,但不推荐

StrictMode.ThreadPolicy policy = new      StrictMode.ThreadPolicy.Builder().permitAll().build();

 StrictMode.setThreadPolicy(policy); 

在android manifest.xml文件中添加此权限:

<uses-permission android:name="android.permission.INTERNET"/>

您应该像new HttpGetter().execute(URL)这样执行任务

请注意, AsyncTask只能执行一次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM