2016-12-06 3 views
1

У меня есть простая программа, которая вызывает службу отдыха и отображает вывод.Codename One RESTfulWebServiceClient Threads

Проблема заключается в том, что дисплей обновляется до того, как возвращается метод rest.

Я пытался использовать вызов и блокировать, однако, как представляется, метод .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

Я нашел обходной путь, который работает.

Как я вижу, проблема заключается в методе .find класса RESTfulWebServiceClient. Строка NetworkManager.getInstance(). AddToQueue (req); создает асинхронный вызов для остальной сетевой службы и возвращает метод до вызова.

Чтобы обойти это, я воссоздал класс RESTfulWebServiceClient в своем проекте и скопировал источник из github.

Затем я изменил

NetworkManager.getInstance() addToQueue (REQ).

к

NetworkManager.getInstance() addToQueueAndWait (REQ).

Это приводит к тому, что метод возвращает оставшийся вызов перед возвратом.

+0

неработающая ссылка .... –

+0

Спасибо (damn markdown). В нашем [мастере веб-службы] (https://www.codenameone.com/how-do-i---access-remote-webservices-perform-operations-on-the-server.html) мы создаем две версии каждого метод sync и async. –