Exception for android httpclient.execute

When I test the simulator, it works, but when the test is with my device (galaxy s3), it continues to throw errors when during the following code:

HttpResponse response; response = httpclient.execute(httppost); 

exceptions:

 09-03 08:16:49.018: E/AndroidRuntime(24254): java.lang.RuntimeException: Unable to start activity ComponentInfo{sg.dianping/sg.dianping.activity.ItemListActivity}: android.os.NetworkOnMainThreadException 09-03 08:16:49.018: E/AndroidRuntime(24254): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1970) 09-03 08:16:49.018: E/AndroidRuntime(24254): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1995) 09-03 08:16:49.018: E/AndroidRuntime(24254): at android.app.ActivityThread.access$600(ActivityThread.java:128) 09-03 08:16:49.018: E/AndroidRuntime(24254): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1161) 09-03 08:16:49.018: E/AndroidRuntime(24254): at android.os.Handler.dispatchMessage(Handler.java:99) 09-03 08:16:49.018: E/AndroidRuntime(24254): at android.os.Looper.loop(Looper.java:137) 09-03 08:16:49.018: E/AndroidRuntime(24254): at android.app.ActivityThread.main(ActivityThread.java:4517) 09-03 08:16:49.018: E/AndroidRuntime(24254): at java.lang.reflect.Method.invokeNative(Native Method) 09-03 08:16:49.018: E/AndroidRuntime(24254): at java.lang.reflect.Method.invoke(Method.java:511) 09-03 08:16:49.018: E/AndroidRuntime(24254): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993) 09-03 08:16:49.018: E/AndroidRuntime(24254): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760) 09-03 08:16:49.018: E/AndroidRuntime(24254): at dalvik.system.NativeStart.main(Native Method) 09-03 08:16:49.018: E/AndroidRuntime(24254): Caused by: android.os.NetworkOnMainThreadException 09-03 08:16:49.018: E/AndroidRuntime(24254): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099) 09-03 08:16:49.018: E/AndroidRuntime(24254): at java.net.InetAddress.lookupHostByName(InetAddress.java:391) 
+6
source share
1 answer

This NetworkingOnMainThread exception is thrown when you perform network activity in the user interface thread. It has the potential to block the main thread, as it waits until the network connection is completed before resuming, thereby blocking the stream.

You have 2 options.

1 - Move all your networks to another stream. The most common and easiest solution is AsyncTask. But there are other options, such as Handlers . This is the recommended option.

2- You can change the policy to allow networking in the user interface stream.

just add this code

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

This parameter is not recommended because it simply bypasses the exception. An exception is thrown for a reason. I would choose the first option. There are many guides for implementing AsyncTask .

Good luck.

+15
source

Source: https://habr.com/ru/post/924413/


All Articles