【问题标题】:Can't resolve (Firebase)User expression expected无法解析(Firebase)预期的用户表达式
【发布时间】:2021-08-11 21:25:48
【问题描述】:

只是尝试按照我正在观看的教程进行电话身份验证,我已经写下了如下代码,但我不断收到“用户”预期的错误表达式 - 我对此完全陌生,所以我想这很简单,但我需要帮助!提前谢谢!

mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
    @Override
    public void onVerificationCompleted(@NonNull PhoneAuthCredential phoneAuthCredential) {
        signInWithPhoneAuthCredential(phoneAuthCredential);


    }

    private void signInWithPhoneAuthCredential(PhoneAuthCredential phoneAuthCredential) {
        FirebaseAuth.getInstance().signInWithCredential(phoneAuthCredential).addOnCompleteListener(this, new OnCompleteListener<Credential.UserCredential>() {
            @Override
            public void onComplete(@NonNull Task<Credential.UserCredential> task) {
                if(task.isSuccessful())
                    userIsLoggedIn();

            }

            private void userIsLoggedIn() {
                User = FirebaseAuth.getInstance().getCurrentUser();
                if(User != null){
                    startActivity(new Intent(getApplicationContext(), MainPageActivity.class));
                    finish();
                    return;

【问题讨论】:

  • 变量User 从未被定义过。
  • User 对象是如何定义的?请回复@AlexMamo

标签: android firebase firebase-authentication


【解决方案1】:

您有一个名为 "User" 的类,但您没有在此处定义它的变量,它显示 java 表达式错误。实际上,您正在寻找 Firebase 的用户,FirebaseAuth 的类别为 FirebaseUser 。所以它应该在代码下面来检查当前用户。

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
                if(user != null){.....

更新(导致新错误) - 您正在实施 PhoneAuthCredential ,但传递了基于用户名密码的 Credential.UserCredential 并实施了错误的方法。

您的signInWithPhoneAuthCredential void 将是 -

private void signInWithPhoneAuthCredential(PhoneAuthCredential phoneAuthCredential) {
FirebaseAuth.getInstance().signInWithCredential(phoneAuthCredential).addOnCompleteListener(this , new OnCompleteListener<AuthResult>() {
    @Override
    public void onComplete(@NonNull Task<AuthResult> task) {
        if (task.isSuccessful()) {
            userIsLoggedIn();
        } else {
            //
        }
    }
});
}

您附加的代码将是 -

  mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
        @Override
        public void onVerificationCompleted(@NonNull PhoneAuthCredential phoneAuthCredential) {
            signInWithPhoneAuthCredential(phoneAuthCredential);
        }

        @Override
        public void onVerificationFailed(@NonNull FirebaseException e) {
            //TODO
        }

        @Override
        public void onCodeSent(@NonNull String s, @NonNull PhoneAuthProvider.ForceResendingToken forceResendingToken) {
            super.onCodeSent(s, forceResendingToken);

            //TODO

        }
    };
}


private void signInWithPhoneAuthCredential(PhoneAuthCredential phoneAuthCredential) {
    FirebaseAuth.getInstance().signInWithCredential(phoneAuthCredential).addOnCompleteListener(this , new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            if (task.isSuccessful()) {
                userIsLoggedIn();
            } else {
                //
            }
        }
    });
}

private void userIsLoggedIn() {
    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
    if (user != null) {
        startActivity(new Intent(getApplicationContext(), MainPageActivity.class));
        finish();
        //  return;
    }
}

请查看documentation

【讨论】:

  • 如果我这样做我得到错误:无法解析方法'addOnCompleteListener(匿名com.google.firebase.auth.PhoneAuthProvider.OnVerificationStateChangedCallbacks,匿名com.google.android.gms.tasks.OnCompleteListener)'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-11
  • 2020-09-19
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多