9

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

在第一阶段,我只想运行程序,而不更改源。因此,我将 AndroidManifesr.xml 中的行从:

    安卓:targetSdkVersion="15"

至:

    安卓:targetSdkVersion="10"

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

4

3 回答 3

21

您可以将其更改为:

android:targetSdkVersion="9"

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

但是,我建议不要这样做。相反,您应该将任何长时间运行的操作或可能长时间运行的操作移动到后台线程中,例如AsyncTask

您还可以尝试使用以下方法关闭严格模式:

    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
于 2012-09-29T07:46:17.180 回答
4

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

ThreadPolicy tp = ThreadPolicy.LAX;
StrictMode.setThreadPolicy(tp);
于 2012-09-29T07:49:24.030 回答
0

这些不是解决方案,你只是告诉监护人睡觉和窗台!android 决定不让您在主线程(UI 线程)中进行网络操作,因为这些操作可以使“停止”(ui 停止响应)。所以,正如我所读到的,他们告诉你不要射你的腿,你会找到方法!!!

解决方案:分离线程,或异步...

于 2013-12-04T23:17:48.470 回答