2013-10-09 63 views
0

我开发了一个Sencha Touch应用程序,它在登录过程中使用网络连接来调用不同的Web服务。 我使用Sencha CMD构建原生apk,它适用于Android 2.3.7,但不适用于较新版本。 我读到这是一个NetworkOnMainThreadException问题。我发现Android的解决方案是:Sencha Touch Apk和NetworkOnMainThreadException

1)通过实施AsyncTask来进行webservice调用。

2)使用StrictMode类在Android和制定的政策

但在我的煎茶的Javascript应用程序如何应用这些解决方案? 我真的很希望你们中的某个人找到了解决方案!

感谢您的任何建议!

编辑

一些测试,我发现,我的应用程序工作在安卓2.3.7罚款后但不是因为Android的4我的web服务之一。 这是一个liferay json web服务。这是我拨打的第四个Web服务,如果我不叫它,我的应用程序工作正常。 是否有人知道Android(版本> 2.3.7)Web View是否不支持Liferay Web Service?

回答

1

我想你正在执行UI Thread的网络操作。这将导致阻止用户界面。从Android 3.0开始,在UI Thread上执行网络操作不适用,它会引发NetworkOnMainThreadException

在API文档,它说:

网络操作可能涉及不可预测的延迟。为了防止这种 导致糟糕的用户体验,请始终在与UI不同的线程上执行网络操作 。 AsyncTask类提供了从UI线程触发新任务的最简单方法之一。

所以你应该使用AsyncTask来解决这个问题。

看看这个了link。这可以是写作的样本AsyncTask

如果您想知道为什么应用此过程以及抛出此异常的原因。检查this以及。

希望这可以帮助你!

+0

谢谢gokhanakkurt!我知道什么是问题,以及如何在java中解决它,但不是在Sencha/javascript中。现在我正在写一个新的android java应用程序,并试图把我的app.jar文件(我使用dextojar工具从apk创建了jar文件) –

+0

好的,想要在Sencha Touch中解决这个问题吗?你能特意告诉我你的问题吗?你的目的是什么? – gokhanakkurt

+0

问题是我的sencha应用程序有一个登录视图,并且在您输入用户名和密码后,我的应用程序会调用6个不同的Web服务,然后如果一切正常,您可以进入下一个视图。我知道这是一个线程问题。我使用延迟任务,但它不能解决问题。我的应用在登录视图中出现 –