2016-12-06 16 views
1

私は休憩サービスを呼び出し、出力を表示する簡単なプログラムを持っています。コード名1つのRESTfulWebServiceClientスレッド

問題は、残りのメソッドが返される前に表示が更新されていることです。

私はinvokeとブロックを使用しようとしましたが、.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

ありがとう(damn markdown)。私たちの[Webサービスウィザード](https://www.codenameone.com/how-do-i---access-remote-webservices-perform-operations-on-the-server.html)では、それぞれの2つのバージョンを作成しますメソッドの同期と非同期。 –

関連する問題