Estoy utilizando una biblioteca de terceros para conectarme a un servidor a través del protocolo asíncrono y obtener respuesta. Por ejemplo método para obtener ID de usuario por nombre de usuario se parece a esto:Necesito ayuda con devoluciones de llamada y clases anónimas en 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;
}
El problema es que no puede asignar regresado "número" de respuesta del servidor a "identificador de usuario" variable a partir del método (con el fin de devolverlo después) . ¿Cómo resolver esto? Probablemente pueda asignarlo a alguna variable de clase en lugar de variable de método, pero quiero mantenerlo dentro del alcance del método para no tener que lidiar con problemas de concurrencia.
Gracias.
Gracias. Sin embargo, debe llamarse más de una vez ... ¿Qué modelo de sincronización quiere decir leer/escribir desde este objeto ValueBox? Va a ser bastante complicado ... – serg
El problema es que podría tener varias llamadas a getUserId antes de procesar el userId (por ejemplo, imagine que tuvo 5 llamadas en los primeros 100ms). Entonces correría el riesgo de sobrescribir las cosas, etc. ¿Qué quiere hacer en esas situaciones? – Uri
Probablemente no procese más solicitudes hasta que se complete la actual. – serg