我已经用JAVA开发了一个应用程序。现在,我为与Firebase相关的调用做了一个功能。和完美的工作。但是现在我也想将该函数转换为kotlin。但是我对于如何在kotlin中使用该函数调用感到困惑。
Java的功能:
public static void firebaseAuth(FirebaseAuth auth, AuthCredential authCredential, Function<Object, Void> delegate) {
auth.signInWithCredential(authCredential).addOnCompleteListener(task -> {
if (task.isSuccessful()) {
delegate.apply(auth.getCurrentUser());
} else {
delegate.apply(task.getException());
}
});
}
在Java中使用此功能:
FireSignInHelper.firebaseAuth(mFireAuth, authCredential, o -> {
if (o instanceof Exception) {
signIn_UnSuccessful((Exception) o);
} else if (o instanceof FirebaseUser) {
FirePacket firePacket = new FirePacket();
firePacket.setProvider(provider);
firePacket.setToken(((FirebaseUser) o).getUid());
firePacket.setFirebaseUser((FirebaseUser) o);
signIn_Successful(firePacket);
}
return null;
});
Kotlin中的转换函数:
fun firebaseAuth(auth: FirebaseAuth,
authCredential: AuthCredential?,
delegate: Function<Any?, Void?>
) {
auth.signInWithCredential(authCredential!!)
.addOnCompleteListener { task: Task<AuthResult?> ->
if (task.isSuccessful) {
delegate.apply(auth.currentUser)
} else {
delegate.apply(task.exception)
}
}
}
在kotlin中使用转换函数:
我想知道这个答案。因为我已经尝试通过Android Studio,但是编译器无法正确转换。所以我想知道如何在kotlin中使用此功能。
预先感谢。
我认为您只是想做这样的事情
fun firebaseAuth(
auth: FirebaseAuth,
authCredential: AuthCredential?,
listener: (Any) -> Unit
) {
auth.signInWithCredential(authCredential!!)
.addOnCompleteListener {
listener.invoke(if (it.isSuccessful) auth.currentUser else it.exception)
}
}
然后
FireSignInHelper.firebaseAuth(mFireAuth, authCredential) {
when(it){
is FirebaseUser -> { ... }
is Exception -> { ... }
}
}