【问题标题】:How to fix NetworkOnMainThreadException when sending an image file [duplicate]发送图像文件时如何修复 NetworkOnMainThreadException [重复]
【发布时间】:2016-06-21 23:32:33
【问题描述】:

实际上,我尝试将图像文件从 Android 发送到另一台计算机,但出现错误: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

【问题讨论】:

  • 您正在主线程上进行网络操作。在单独的线程上执行,例如异步等\
  • 在 AsyncTask 中运行你的代码
  • 使用异步任务,将此代码添加到您的活动中 if (android.os.Build.VERSION.SDK_INT > 9) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll() 。建造(); StrictMode.setThreadPolicy(policy); }

标签: java android image sockets


【解决方案1】:

您正在尝试在主线程上发送/上传图像。您应该在后台线程中执行此操作。您可以使用AsyncTask 来达到目的。

Android 文档:

当应用程序尝试执行 在其主线程上进行网络操作。

这仅针对以 Honeycomb SDK 为目标的应用程序或 更高。允许针对早期 SDK 版本的应用程序执行 在他们的主事件循环线程上联网,但它很重 灰心。参见文档Designing for Responsiveness

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-20
    • 2013-11-13
    • 2011-07-06
    • 2015-11-08
    相关资源
    最近更新 更多