gpt4 book ai didi

android - 需要帮助将 FIrebase 电话身份验证重构为 MVVM 架构

转载 作者:行者123 更新时间:2023-11-29 02:20:17 25 4
gpt4 key购买 nike

我无法弄清楚如何处理身份验证后从 FirebaseLoginRepository 类返回到 LoginViewModel 的登录结果,比如它是否成功,我应该像在 MVP 模式中那样使用回调监听器吗?

请原谅我的误解或一些非常规问题,因为这是我在 StackOverflow 上的第一个问题

我不知道我一点也不知道,在互联网上找不到任何有用的东西

public void login{

auth.signInWithCredential(credential).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {

if(task.isSuccessful()){
//using login Result callback as unable to figure out how
//to hand back result to LoginViewModel
//i am certain that doing this breaks the principle of MVVM
loginResultCallback.onSuccess();
}else {
loginResultCallback.onError();
}
}
});

}

最佳答案

假设您在后台线程上执行此操作,您可以执行以下操作:

public void login{
CountDownLatch latch = new CountDownLatch(1);
auth.signInWithCredential(credential).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {

if(task.isSuccessful()){
//using login Result callback as unable to figure out how
//to hand back result to LoginViewModel
//i am certain that doing this breaks the principle of MVVM
viewModel.something = something;
}else {
loginResultCallback.onError();
}
latch.countDown();
}
});
try {
latch.await(30000);
} catch (TimeoutException e) {
Log.e("TUT", "Error timeed out", e);
}
}

这允许您阻塞线程并等待回调发生,因此这是一种抽象回调并使用 LiveData 的方法。您只需要知道它对线程做了什么。

除此之外,您应该查看 firebase API 是否具有针对相同 API 的同步方法。

https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html

关于android - 需要帮助将 FIrebase 电话身份验证重构为 MVVM 架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56476528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com