快速修复NetworkOnMainThreadException

我需要执行第三方的开源程序,它会抛出NetworkOnMainThreadException。 根据SDK的参考资料,只有针对Honeycomb SDK或更高版本的应用程序才会抛出这个问题。 针对早期SDK版本的应用程序允许在主事件循环线程上进行联网。

在第一阶段,我只是想运行该程序,而不改变源代码。 所以,我改变了AndroidManifesr.xml中的行:

    机器人:targetSdkVersion = “15”

至:

    机器人:targetSdkVersion = “10”

但是,这并没有帮助,程序仍然抛出NetworkOnMainThreadException。 我怎样才能使这个工作? 我正在尝试在Android Emulation Google API上执行该程序(级别16)。

Solutions Collecting From Web of "快速修复NetworkOnMainThreadException"

您可以将其更改为:

android:targetSdkVersion="9" 

API 10对应于蜂窝,而9是姜饼。 此行为仅在API 10及更高版本中可见。

不过,我会build议反对这个。 相反,您应该将任何长时间运行的操作或可能长时间运行的操作移动到后台线程中,例如AsyncTask 。

您也可以尝试使用以下设置closures严格模式:

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

您正在UI线程上执行networking任务。 执行networking操作的最好方法是使用AsyncTask或简单地创build另一个线程。 但是,如果你想要一个快速和肮脏的方式来摆脱错误; 你也可以使用这个

 ThreadPolicy tp = ThreadPolicy.LAX; StrictMode.setThreadPolicy(tp); 

这些都不是解决办法,你只要告诉睡衣睡觉和窗台! Android决定不让你在主线程(UI线程)中进行networking操作,因为这些操作可以使(停止响应)“停止”。 所以,据我读,他们告诉你不要拍你的腿,你find办法!

解决方法:分离线程,或者Async …