1

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

再次感谢大家!

4

2 回答 2

1

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);
于 2013-04-05T10:52:33.850 回答
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();
于 2013-04-05T10:30:11.447 回答