Używam biblioteki innej firmy do łączenia się z serwerem za pośrednictwem protokołu asynchronicznego i uzyskiwania odpowiedzi. Na przykład metoda, aby uzyskać identyfikator użytkownika przez nazwę użytkownika wygląda następująco:Potrzebujesz pomocy dotyczącej wywołań zwrotnych i anonimowych klas w Javie
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;
}
Problemem jest to, że nie można przypisać zwrócony „wynik” od odpowiedzi serwera do „id_uzytkownika” zmienną od metody (w celu jego powrotu po) . Jak rozwiązać ten problem? Prawdopodobnie mogę przypisać ją do zmiennej pewnej klasy, a nie do metody, ale chcę zachować ją w zasięgu metody, więc nie muszę zajmować się kwestiami współbieżności.
Dzięki.
Dzięki. Trzeba go jednak wywołać więcej niż jeden raz ... Jaki model synchronizacji ma na myśli, aby odczytać/zapisać z tego obiektu ValueBox? To będzie dość skomplikowane ... – serg
Problem polega na tym, że możesz mieć wiele wywołań getUserId zanim zdążysz przetworzyć identyfikator użytkownika (np. Wyobraź sobie, że masz 5 wywołań w ciągu pierwszych 100ms). Mógłbyś wtedy mieć problemy z nadpisaniem rzeczy itp. Co chcesz robić w takich sytuacjach? – Uri
Prawdopodobnie nie przetwarzamy kolejnych żądań, dopóki nie zostanie wykonane aktualne. – serg