Android 需要帮助将FIrebase电话身份验证重构为MVVM体系结构吗

Android 需要帮助将FIrebase电话身份验证重构为MVVM体系结构吗,android,firebase-authentication,android-mvvm,Android,Firebase Authentication,Android Mvvm,我不知道如何处理身份验证后从FirebaseLoginRepository类返回LoginViewModel的登录结果,例如,无论是否成功,我是否应该像在MVP模式中那样使用回调侦听器 请原谅我的误解或一些非常规问题,因为这是我关于StackOverflow的第一个问题 我不知道,我一点也不知道,在网上也找不到任何有用的东西 public void login{ auth.signInWithCredential(credential).addOnCompleteListene

我不知道如何处理身份验证后从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();
                }
            }
        });

}
publicsvoid登录{
auth.signiWithCredential(credential).addOnCompleteListener(新OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
//使用登录结果回调无法确定如何
//将结果交回LoginViewModel
//我确信这样做违背了MVVM的原则
loginResultCallback.onSuccess();
}否则{
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);
        }
}
publicsvoid登录{
CountDownLatch闩锁=新的CountDownLatch(1);

使用凭证(凭证)进行身份验证登录。添加完整的Listener(新建OnCompleteListener

你是说问题是因为firebase API需要回调&你不确定如何将回调的结果放入你的LiveData对象中?是的,完全一样,很抱歉无法更好地解释它,因为我是新手,所以学习并解决它如果你对clea感兴趣n Firebase身份验证,您可以检查一下。我不太明白这对我的情况有什么帮助,因为我希望我的登录类独立于所有内容。我只是想找到一种更好的方法来返回登录结果,但非常感谢您返回method。这改变了您的登录方法,使登录结果同步返回到您的livedat一个对象。我确实理解这一点,但它不是仍然紧密耦合吗?请原谅,因为我对干净代码和解耦的概念还不熟悉,仍然在学习mm没有足够的代码让我对耦合进行评论抱歉