在Runnable中,主线程上的HttpClient查询不断崩溃

时间:2013-05-05 18:23:46

标签: android android-asynctask httpclient runnable

我已经在 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 的情况下执行此操作?

1 个答案:

答案 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();