私はLibGDXで小さなゲームを作っています。プレーヤーのユーザー名をローカルとサーバーに保存しています。問題は、アプリケーションが呼び出しの結果を待っていないため、オンライン データベースの ID がローカルに保存されないことです。コードの全体的な流れは次のとおりです。
//Create a new user object
User user = new User(name);
//Store the user in the online database
NetworkService networkService = new NetworkService();
String id = networkService.saveUser(user);
//Set the newly generated dbase ID on the local object
user.setId(id);
//Store the user locally
game.getUserService().persist(user);
このコードでは、関数がすぐに返されるid
ため、変数は設定されていません。saveUser
サーバー通信からの結果を処理できるように、アプリケーションがネットワーク要求の結果を待機するようにするにはどうすればよいですか?
これはのコードですsaveUser
:
public String saveUser(User user) {
Map<String, String> parameters = new HashMap<String, String>();
parameters.put("action", "save_user");
parameters.put("json", user.toJSON());
HttpRequest httpGet = new HttpRequest(HttpMethods.POST);
httpGet.setUrl("http://localhost:8080/provisioner");
httpGet.setContent(HttpParametersUtils.convertHttpParameters(parameters));
WerewolfsResponseListener responseListener = new WerewolfsResponseListener();
Gdx.net.sendHttpRequest (httpGet, responseListener);
return responseListener.getLastResponse();
}
これはWerewolfsResponseListener
クラスです:
class WerewolfsResponseListener implements HttpResponseListener {
private String lastResponse = "";
public void handleHttpResponse(HttpResponse httpResponse) {
System.out.println(httpResponse.getResultAsString());
this.lastResponse = httpResponse.getResultAsString();
}
public void failed(Throwable t) {
System.out.println("Saving user failed: "+t.getMessage());
this.lastResponse = null;
}
public String getLastResponse() {
return lastResponse;
}
}