首页 > 解决方案 > 无法解析(Firebase)预期的用户表达式

问题描述

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

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;

标签: androidfirebasefirebase-authentication

解决方案


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

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

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

你的signInWithPhoneAuthCredential空虚将是——

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;
    }
}

请检查文档


推荐阅读