Tôi đang tạo một trò chơi nhỏ trong LibGDX. Tôi đang lưu tên người dùng của người chơi cục bộ cũng như trên máy chủ. Vấn đề là ứng dụng không chờ kết quả của cuộc gọi để ID của cơ sở dữ liệu trực tuyến không được lưu cục bộ. Dưới đây là dòng chảy chung của các mã:Phản hồi đồng bộ với `Gdx.net.sendHttpRequest` trong LibGDX
//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);
trong mã này, biến id
là không nhận được thiết lập vì saveUser
chức năng đang trở lại ngay lập tức. Làm thế nào tôi có thể làm cho ứng dụng chờ kết quả của yêu cầu mạng để tôi có thể làm việc với các kết quả từ giao tiếp của máy chủ?
Đây là mã cho 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();
}
Đây là lớp 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;
}
}
'NetworkService' là gì? Nó không phải là một phần của Libgdx, mà tôi có thể thấy. Bất kỳ sự không đồng bộ nào bạn thấy là thuộc tính của mã bên trong 'saveUser', vì các phương thức Java luôn đồng bộ, vì vậy bạn sẽ cần phải mở rộng trên đó. –
Xem chỉnh sửa mã. – Robbert