Angularjs Phonegap Android使用Websockets

4

我甚至不知道如何直接解释这个问题,但我会尝试。

介绍

我正在使用angularjs构建一个Phonegap应用程序,并尝试通过拼接WebSocket消息来更新我的UI。我曾经有过定期与服务器通信并相应地更改其数据的服务,它工作得非常好。例如:

Service1.js:

     var applyUpdate = function (
         angular.extend(instance, data);
         if (!$rootScope.$$phase) $rootScope.$apply();
     };

     this.update = function () {
         DataProvider.get('getThermostatSettings', {}, applyUpdate, function(){}, true);
     }

基本上,我只是每5秒钟调用“update”函数,从服务器接收数据并更新此服务。然后控制器只需访问此服务,一切都正常运行。
问题是,我编写了一个使用Java编写的WebSocket接口,它为我处理所有的WebSocket实现。我从https://github.com/ziadloo/PhoneGap-Java-WebSocket获取了它。它基本上注册了一个JavaScript接口,可从JavaScript访问以与Java通信。
现在每当我有更改时,我只需通过WebSocket从服务器推送一个字符串,表示应该进行更新,然后我从我的JavaScript中调用服务中的“update”函数,而不是定期查询数据,这只是愚蠢的。
WebSockets工作得很好。我可以看到消息的到来,我调用更新,它从服务器正确地获取了所有内容,“update”函数随后使用正确的值调用了“applyUpdate”,甚至调用了“$rootScope.$apply”。
但是,Angular服务中所有更新的数据都不可见!似乎所有这些更改都在运行不同的线程!?!我知道JavaScript是单线程的,但它似乎确实是这样。让我更好地解释一下:我有这样的印象,即当WebView调用JavaScript回调函数时,我有一个不同的JavaScript“线程”正在运行,并且无法访问其外部内容。更多关于此的信息:我编写了一个简单的函数,每5秒输出一个数字。WebSocket更新此数字。我的输出如下:
N: 1
N: 1

在 WebSocket 推送新数字(2)后,我会得到两个打印输出:
N: 1
N: 2

N: 1
N: 2

N: 1
N: 2

有人对此有什么建议吗?有人尝试过类似的事情吗?我不是angular专家,但似乎一旦我从java接口得到回调,一切都会混乱。

我已经查看了:Angularjs model changes after websocket data push from server ,我的代码看起来非常相似。我认为唯一的问题就是这个来自Java的回调。

谢谢

更新:这是一个AngularJS的问题。如果我将这个变量设置为window全局变量,一切都会正常分配。Angular是否可能创建了两个不同的$scopes?

更新[2]:只是为了更清楚一点:在浏览器中,一切都按预期工作。只有当我在模拟器中运行它时,这个东西才会被搞砸。


你是否从同一个域名中提供JS应用程序和Java API服务? - Dmitry Evseev
JavaScript会产生一些跨域请求,但它们都可以工作,包括WebSocket。请查看我的更新。似乎angular会以某种方式创建两个作用域。如果我将此变量设置在全局命名空间中,一切都能够正常工作。 - José Leal
那么在哪里定义了 applyUpdate 中使用的 instancedataData 显然是从 WebSocket 返回的,那么 instance 是什么? - Dmitry Evseev
在Angular服务的开头,有一个var instance = this;。这基本上就是this。那里正在设置值。我已经在这行代码后面放了一个日志来检查这些值是否被正确设置,它们确实被正确设置了。 - José Leal
只是为了更清楚一些:在浏览器中,一切都按预期工作。只有当我在模拟器中运行它时,这个东西才会混乱。 - José Leal
嘿大家,我对phonegap和angularjs都是新手。我尝试了这些教程(http://briantford.com/blog/angular-phonegap.html),(http://devgirl.org/2013/06/10/quick-start-guide-phonegap-and-angularjs),但似乎都不起作用(他们在Xcode / ios上工作,但在android上不行)。有人可以指点我一个完整的angularjs/phonegap项目在android上运行的 repo 吗?谢谢! - abbood
1个回答

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接