我已经在 Android 2.2 上顺利运行此代码。但是在 Android 4.0 上它会崩溃。
我假设,它是由 HttpClient 引起的。所以我将代码移动到了 Runnable ,但它一直在崩溃。
new Runnable() {
@Override
public void run() {
try {
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet();
request.setURI(new URI(serverroot + URI_ARGS));
client.execute(request);
} catch (URISyntaxException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}.run();
有没有其他方法可以在不使用 AsyncTask 的情况下执行此操作?
答案 0 :(得分:0)
从API11开始,如果您在UI线程上使用网络,则会抛出新的异常NetworkOnMainThreadException
,因此您需要将代码移出UI线程。 Runnable
只是界面,实际上Thread
没有帮助你。
new Thread(new Runnable() {
@Override
public void run() {
try {
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet();
request.setURI(new URI(serverroot + URI_ARGS));
client.execute(request);
} catch (URISyntaxException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();