2016-12-06 104 views
1

我有一個簡單的程序調用rest服務並顯示輸出。Codename One RESTfulWebServiceClient線程

問題是顯示器在休息方法返回之前正在更新。

我試過使用invoke和block,但是.find方法似乎在它自己的線程中運行?異步

Sys輸出如下;

之前之後

System.out.println("Before"); 
userClient = new RESTfulWebServiceClient("http://localhost:8080/MyService/api/person"); 

Display.getInstance() 
    .invokeAndBlock(() -> { 
userClient.find(
      new Query().id("id"), rowset -> { 
     for (Map m : rowset) { 
      person = new JSONObject(m); 
      System.out.println(person.getString("surname")); 
     } 
    } 
} 
System.out.println("After"); 
+0

我認爲這可能是原因? 。NetworkManager.getInstance()addToQueue(REQ); –

回答

1

我已經找到一個可行的解決方法。

正如我所看到的問題是RESTfulWebServiceClient類的.find方法。該行NetworkManager.getInstance()。addToQueue(req);創建對其餘網絡服務的異步調用,並在調用之前返回該方法。

爲了解決這個問題,我在我的項目中重新創建了RESTfulWebServiceClient類,並從github中複製了源代碼。

我再變

NetworkManager.getInstance()addToQueue(REQ)。

NetworkManager.getInstance()addToQueueAndWait(REQ)。

這會導致該方法在返回之前完成其餘呼叫。

+0

斷開鏈接.... –

+0

謝謝(該死的降價)。在我們的[網絡服務嚮導](https://www.codenameone.com/how-do-i---access-remote-webservices-perform-operations-on-the-server.html)中,我們創建了兩個版本方法同步和異步。 –