[英]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.