2013-03-22 67 views
4

我甚至不知道如何直接解釋這一點,但我會嘗試。Angularjs Phonegap Android使用Websockets

介紹

我建立一個應用程序的PhoneGap與angularjs,我試圖縫合起來的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秒,從服務器接收數據並更新該服務。然後控制器就可以簡單地訪問這個服務,並且一切正常。

問題

現在的問題是,我縫合了的WebSocket接口用Java編寫的,它處理所有對我的WebSocket實現。我把它從:https://github.com/ziadloo/PhoneGap-Java-WebSocket。它基本上註冊了一個Javascript接口,可以通過Javascript與java通信。

每當我現在有一個變化,我只是從服務器通過WebSocket推送一個字符串,說它應該更新,然後我從我的JavaScript中的服務調用「更新」功能,而不是定期查詢數據,這只是愚蠢的。

WebSockets運行良好。我可以看到消息來了,我調用更新,它從服務器正確地獲取所有東西,「更新」函數調用,然後使用正確的值等「applyUpdate」,甚至「$ rootScope。$ apply」被調用。

但角度服務中的所有更新數據都不可見!似乎所有這些變化都在不同的線程中運行!。我知道JavaScript是單線程的,但它似乎是如此。

讓我把這個以更好的方式:我有儘快的WebView調用JavaScript回調函數的印象,我有一個不同的JavaScript「線程」運行,並沒有什麼外界可以訪問

更多關於它

我寫的只是輸出一些每5秒功能。 websocket更新這個數字。而我的輸出如下:WebSocket的一個新的號碼(2)推動數據

再經過
N: 1 
N: 1 

,我得到兩個打印:

N: 1 
N: 2 

N: 1 
N: 2 

N: 1 
N: 2 

任何人有這個任何指針?任何人都試圖做類似的事情我不是角色專業人員,但似乎只要我從java界面獲得回調,一切都會變得混亂。

我已經看過:Angularjs model changes after websocket data push from server和我的代碼看起來非常相似。我認爲唯一的問題是Java的回調。

謝謝

更新:這是一個與AngularJS問題。如果我在一個窗口全局變量中設置了這個變量,那麼所有的東西都被正常分配。 Angular有可能以某種方式創建兩個不同的$範圍?

更新[2]:只是要更清楚一點:在瀏覽器中,一切都按預期工作。只有當我在模擬器中運行它時,這件事情會變得混亂。

+0

你是否從同一個域名服務js應用程序和java api? – 2013-03-22 17:14:56

+0

JavaScript使一些跨域請求,但他們都工作,包括WebSocket。請看我的更新。看起來,角正在創造兩個範圍。如果我在全局命名空間中設置了這個變量,那麼一切都可以實現 – 2013-03-22 17:17:09

+0

好吧,那麼你在哪裏定義'applyUpdate'中使用的'instance'和'data'。數據顯然是從websocket返回的,什麼是「instanse」? – 2013-03-22 19:02:19

回答