【问题标题】:App works fine in android 2.3.7 and not in 4.1.2应用程序在 android 2.3.7 而不是 4.1.2 中运行良好
【发布时间】:2013-04-05 10:19:05
【问题描述】:

我有一个应用程序在 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 文件调用互联网,我不认为这可能是错误

再次感谢大家!

【问题讨论】:

  • 你使用过网络服务吗?
  • 请发布您的 Logcat 错误..
  • The jar file makes a call to internet, I don´t think this could be the mistake - 这实际上可能会产生巨大的影响。
  • 你的jar文件是放在外部还是项目本身里面?
  • NetworkOnMainThreadException

标签: android jar android-version


【解决方案1】:

jar 文件调用互联网,我不认为这可能是 错误

=> 抱歉,老兄问题出在这里,正如您所说,您的应用在 2.3 中却没有,此失败背后的原因是 NetworkOnMainThreadException

现在,为什么每当您在 >2.3 版本的设备上运行应用程序时都会引发此异常?

=> 每当应用程序尝试在其主线程上执行网络操作时,就会出现NetworkOnMainThreadException

解决方案:

以下是解决此问题的两种解决方案:

1) 标准方式是通过实现AsyncTask进行webservice调用。

2) 懒惰的处理方式是转检查:

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

【讨论】:

  • 感谢 Paresh,我采用 RajaReddy 所说的标准方式,感谢您的链接
【解决方案2】:

从 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();

【讨论】:

  • 所以 RajaReddy 你说的是把调用放在一个 AsynTask 的 jar 中??
  • 网络相关的操作应该在asyncTask中。我的意思是调用网络jar相关的函数应该在主线程中。
  • 谢谢 RajaReddy 我会尝试并告诉你
猜你喜欢
  • 2013-11-29
  • 1970-01-01
  • 2014-05-30
  • 2017-11-16
  • 1970-01-01
  • 1970-01-01
  • 2018-11-21
  • 1970-01-01
  • 2020-03-05
相关资源
最近更新 更多