我开发了一个Sencha Touch App,它使用网络连接在登录过程中调用不同的Web服务。 我使用Sencha CMD构建原生apk,它适用于Android 2.3.7但不适用于较新版本。 我读到这是一个NetworkOnMainThreadException问题。 我在Android上找到的解决方案是:
1)通过实现AsyncTask来进行webservice调用。
2)在Android中使用StrictMode Class并设置策略
但是如何在我的Sencha Javascript App中应用这些解决方案? 我真的希望有人找到解决方案!
感谢您的任何建议!
修改
经过一些测试后,我发现我的应用程序在android 2.3.7中工作正常但在android 4中没有,因为我的一个web服务。 这是一个liferay json网络服务。这是我打电话的第四个网络服务,如果我不打电话,我的应用程序工作正常。 如果Android(版本> 2.3.7)Web View不支持Liferay Web服务,有人知道吗?
答案 0 :(得分:1)
我认为您正在UI Thread
上执行网络操作。这将导致阻止用户界面。自Android 3.0起,在UI Thread
上执行网络操作不适用,它会抛出NetworkOnMainThreadException
。
在API文档中,它说:
网络运营可能涉及不可预测的延迟。为了防止这种情况 从导致糟糕的用户体验,始终执行网络操作 在与UI的单独线程上。 AsyncTask类提供了一个 从UI线程启动新任务的最简单方法。
因此,您应该使用AsyncTask
来处理此问题。
查看link。这可以是写AsyncTask
如果您想知道为什么应用此过程以及为什么抛出此异常。也请检查this。
希望这可以帮到你!