Es fundamental entender el código bien antes de utilizarlo a tu proyecto si ttienes algo que aportar puedes comentarlo.
Solución:
Esto realmente depende de cómo defina el método de devolución de llamada. Si utiliza una función independiente, utilice el ::
operador. Primero (por supuesto), debería explicar la sintaxis:
(//these parenthesis are technically not necessary
(persons: Array, error: MyError?)//defines input arguments: an Array of Person and a nullable MyError
-> Unit//defines the return type: Unit is the equivalent of void in Java (meaning no return type)
)
Entonces el método se define como:
fun callback(persons: Array, error: Exception?)
//Do whatever
Y lo llamas así:
DataProvider.getPeople(
true,
results = this::callback
)
Sin embargo, si usa funciones de devolución de llamada anónimas, es ligeramente diferente. Esto también usa lambda:
getPeople(true, results=/*bracket defines a function. `persons, error` are the input arguments*/persons, error ->
//do whatever
)
Sí, Kotlin tiene una excelente manera de usar las funciones de devolución de llamada. A continuación, le mostraré un ejemplo de cómo las uso:
fun addMessageToDatabase(message: String, fromId: String, toId: String,
addedMessageSuccessHandler: () -> Unit,
addedMessageFailureHandler: () -> Unit)
val latestMessageRef = mDatabase.getReference("/latest-messages/$fromId/$toId")
latestMessageRef.setValue(message).addOnSuccessListener
latestMessageUpdateSuccessHandler.invoke()
.addOnFailureListener
latestMessageUpdateFailureHandler.invoke()
Y finalmente, puede utilizar las nuevas devoluciones de llamada con el siguiente código
databaseManager.updateLatestMessageForUsers(message, fromId, toId,
latestMessageUpdateSuccessHandler =
// your success action
,
latestMessageUpdateFailureHandler =
// your failure action
)
Entonces, básicamente, cuando agrego con éxito una nueva fila a mi base de datos, invoco una respuesta de éxito o falla a la persona que llama al servicio. Esperemos que esto ayude a alguien.