Я использую некоторую стороннюю библиотеку для подключения к серверу через протокол async и получения ответа. Для примера метод, чтобы получить идентификатор пользователя по имени пользователя выглядит следующим образом:Нужна помощь с обратными вызовами и анонимными классами в Java
public int getUserid(String username) {
int userid = 0;
connection.call("getUserid", new Responder() {
public void onResult(final int result) {
System.out.println("userid: " + result);
//how to assign received value to userid and return it?
}
}, username);
//wait for response
while (userid == 0) {
try{
Thread.sleep(100);
} catch (Exception e) {}
}
return userid;
}
Проблема в том, что я не могу назначить вернулся «результат» от ответа сервера на «USERID» переменную из метода (для того, чтобы вернуть его после) , Как это решить? Я, вероятно, могу назначить его некоторой переменной класса, а не переменной метода, но я хочу сохранить ее в пределах области метода, поэтому мне не нужно решать проблемы параллелизма.
Спасибо.
Спасибо. Его нужно вызывать более одного раза, хотя ... Какую модель синхронизации вы имеете в виду, чтобы читать/писать с этого объекта ValueBox? Это будет довольно сложно ... – serg
Проблема в том, что вы могли бы иметь несколько вызовов getUserId, прежде чем вы когда-нибудь сможете обработать userId (например, представьте, что у вас было 5 вызовов в первые 100 мс). Тогда у вас возникнет риск перезаписи вещей и т. Д. Что вы хотите делать в таких ситуациях? – Uri
Наверное, не обрабатывайте дальнейшие запросы до тех пор, пока не будет выполнен текущий. – serg