Android HttpClient : NetworkOnMainThreadException

2019-01-07 00:04发布

I have some code below:

protected void testConnection(String url) {
    DefaultHttpClient httpclient = new DefaultHttpClient();
    HttpGet httpget = new HttpGet(url);
    ResponseHandler<String> responsehandler = new BasicResponseHandler();

    try {
        String connection = httpclient.execute(httpget, responsehandler);
        Toast.makeText(getBaseContext(), R.string.connection_succeed, Toast.LENGTH_SHORT).show();
        view_result.setText(connection);
    } catch(IOException e) {
        Toast.makeText(getBaseContext(), R.string.connection_failed, Toast.LENGTH_SHORT).show();
    }
    httpclient.getConnectionManager().shutdown();
}

and add a permission in Menifest:

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

But it goes an exception: NetworkOnMainThreadException, How can i do?

4条回答
时光不老,我们不散
2楼-- · 2019-01-07 00:15

You cant perform network operations in event thread, since android Api Level 11. Instead you should do network operation in another thread than event thread, and use Handler or Asynctask to do so.

查看更多
霸刀☆藐视天下
3楼-- · 2019-01-07 00:17

I you run your code in android 2.x and its lower version, i think this code will run perfectly. But if you run this in 3.x and it's upper version then you get an Exception. The problem is the you need to call the web service from your worker thread(AsyncTask<>) . You can not call the web service from the main thread.

查看更多
祖国的老花朵
4楼-- · 2019-01-07 00:22

On ICS and later you cannot do network operations on the UI thread anymore. Instead you are forced to create a new thread and do your networking stuff there.

Possible tools are Android's AsyncTask and the normal Java Thread.

A good tutorial can be found here: Android Threads, Handlers and AsyncTask - Tutorial

查看更多
Ridiculous、
5楼-- · 2019-01-07 00:24

Starting from API 11, you can not manipulate network (time-consuming) operations on main thread. Use AsyncTask or Thread to perform such operations.

查看更多
登录 后发表回答