我有一个在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文件调用了互联网,我不认为这可能是错误
再次感谢大家!
答案 0 :(得分:1)
jar文件打电话给互联网,我不认为这可能是 错误
=>对不起老兄问题就在这里,因为你说你的应用程序在< 2.3版本但不在> 2.3中,此失败背后的原因是 NetworkOnMainThreadException
。
现在,为什么在> 2.3版本设备中运行应用时会出现此异常?
=>只要应用程序尝试在其主线程上执行网络操作,就会发生NetworkOnMainThreadException
。
以下是解决此问题的两种解决方案:
1)标准方法是通过实施AsyncTask来进行网络服务呼叫。
2)处理此问题的懒惰方式是检查:
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
答案 1 :(得分:0)
从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();