我有一个在 android 2.3.4、2.3.6 和 2.3.7 中运行良好的应用程序,但在 android 4.1.2 或 4.2.2 中没有(我没有更多设备)
应用程序调用返回结果的 jar 文件,当我在 2.3.7 中测试应用程序时,我调用 jar 并获取结果,但是当我使用 android 4.1.2 执行此操作时,它会强制关闭。这很奇怪,因为唯一的区别是操作系统,因为应用程序是相同的。
jar 文件调用互联网,我不认为这可能是错误
再次感谢大家!
我有一个在 android 2.3.4、2.3.6 和 2.3.7 中运行良好的应用程序,但在 android 4.1.2 或 4.2.2 中没有(我没有更多设备)
应用程序调用返回结果的 jar 文件,当我在 2.3.7 中测试应用程序时,我调用 jar 并获取结果,但是当我使用 android 4.1.2 执行此操作时,它会强制关闭。这很奇怪,因为唯一的区别是操作系统,因为应用程序是相同的。
jar 文件调用互联网,我不认为这可能是错误
再次感谢大家!
jar 文件调用互联网,我不认为这可能是错误
=> 抱歉,问题就在这里,正如您所说,您的应用程序在 < 2.3 版本中运行良好,但在 >2.3 中却没有,此失败背后的原因是NetworkOnMainThreadException
。
现在,为什么每当您在 >2.3 版本的设备中运行应用程序时都会引发此异常?
=>NetworkOnMainThreadException
每当应用程序尝试在其主线程上执行网络操作时都会发生。
以下是解决此问题的两种解决方案:
1) 标准方式是通过实现AsyncTask来进行 web 服务调用。
2)处理此问题的懒惰方法是检查:
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
从 android 版本 4.0 (ICS) 开始,网络操作应该在 AsynTask 中运行。在 AsyncTask 中运行您的代码:
private class Task extends AsyncTask<Void, Void, Void> {
private Exception exception;
@Override
protected Void doInBackground(Void... urls) {
/// run your network operations here
return null;
}
@Override
protected void onPostExecute(RSSFeed feed) {
}
}
new Task ().execute();