0

Acually I try to send an image file from Android to another computer, but I got an error: android.os.NetworkOnMainThreadException

03-08 00:57:40.474: E/AndroidRuntime(1201): FATAL EXCEPTION: main
03-08 00:57:40.474: E/AndroidRuntime(1201): Process: com.example.singh, PID: 1201
03-08 00:57:40.474: E/AndroidRuntime(1201): android.os.NetworkOnMainThreadException
03-08 00:57:40.474: E/AndroidRuntime(1201):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
03-08 00:57:40.474: E/AndroidRuntime(1201):     at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
03-08 00:57:40.474: E/AndroidRuntime(1201):     at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
03-08 00:57:40.474: E/AndroidRuntime(1201):     at libcore.io.IoBridge.connect(IoBridge.java:112)
03-08 00:57:40.474: E/AndroidRuntime(1201):     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
03-08 00:57:40.474: E/AndroidRuntime(1201):     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
03-08 00:57:40.474: E/AndroidRuntime(1201):     at java.net.Socket.startupSocket(Socket.java:567)
03-08 00:57:40.474: E/AndroidRuntime(1201):     at java.net.Socket.tryAllAddresses(Socket.java:128)
03-08 00:57:40.474: E/AndroidRuntime(1201):     at java.net.Socket.<init>(Socket.java:178)
03-08 00:57:40.474: E/AndroidRuntime(1201):     at java.net.Socket.<init>(Socket.java:150)
03-08 00:57:40.474: E/AndroidRuntime(1201):     at com.example.singh.MainActivity$2.onClick(MainActivity.java:65)
03-08 00:57:40.474: E/AndroidRuntime(1201):     at android.view.View.performClick(View.java:4438)
03-08 00:57:40.474: E/AndroidRuntime(1201):     at android.view.View$PerformClick.run(View.java:18422)
03-08 00:57:40.474: E/AndroidRuntime(1201):     at android.os.Handler.handleCallback(Handler.java:733)
03-08 00:57:40.474: E/AndroidRuntime(1201):     at android.os.Handler.dispatchMessage(Handler.java:95)
03-08 00:57:40.474: E/AndroidRuntime(1201):     at android.os.Looper.loop(Looper.java:136)
03-08 00:57:40.474: E/AndroidRuntime(1201):     at android.app.ActivityThread.main(ActivityThread.java:5017)
03-08 00:57:40.474: E/AndroidRuntime(1201):     at java.lang.reflect.Method.invokeNative(Native Method)
03-08 00:57:40.474: E/AndroidRuntime(1201):     at java.lang.reflect.Method.invoke(Method.java:515)
03-08 00:57:40.474: E/AndroidRuntime(1201):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
03-08 00:57:40.474: E/AndroidRuntime(1201):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
03-08 00:57:40.474: E/AndroidRuntime(1201):     at dalvik.system.NativeStart.main(Native Method)
03-08 00:57:42.944: I/Process(1201): Sending signal. PID: 1201 SIG: 9
mkrieger1
  • 19,194
  • 5
  • 54
  • 65
  • You are doing your network operation on main thread. do it on seperate thread like async etc\ – Khizar Hayat Mar 08 '16 at 06:14
  • Run your code in AsyncTask – sasikumar Mar 08 '16 at 06:15
  • Use async task, Add this code to your activity if (android.os.Build.VERSION.SDK_INT > 9) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); } – AmeeJoshi Mar 08 '16 at 07:02

1 Answers1

1

You are trying to send/upload image on main thread. You should do it in background thread. You can use AsyncTask for the purpose.

Android docs:

The exception that is thrown when an application attempts to perform a networking operation on its main thread.

This is only thrown for applications targeting the Honeycomb SDK or higher. Applications targeting earlier SDK versions are allowed to do networking on their main event loop threads, but it's heavily discouraged. See the document Designing for Responsiveness.