【问题标题】:Firebase Phone number authentication error, Phone number not readableFirebase 电话号码身份验证错误,电话号码不可读
【发布时间】:2021-05-06 22:30:02
【问题描述】:

当我在 EditText 字段中输入电话号码并按登录时,java 代码必须验证 editText 字段是否为空。所以输入我的电话号码后,if(!phonenumber.isempty())总是false,执行else语句,即“请输入号码”Toast

这是我的完整代码:

public class User_login extends AppCompatActivity {
    private EditText editTextphone;
    private Button otp_login;
    private FirebaseAuth mAuth;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_login);

        otp_login = (Button) findViewById(R.id.otp_login);
        editTextphone = (EditText) findViewById(R.id.editTextphone);
        String phoneNumber = editTextphone.getText().toString().trim();

        mAuth = FirebaseAuth.getInstance();

        ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar);

        otp_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(!phoneNumber.isEmpty()){
                    if(phoneNumber.length() == 10){

                        progressBar.setVisibility(View.VISIBLE);
                        otp_login.setVisibility(View.INVISIBLE);
                    
                        PhoneAuthOptions options = PhoneAuthOptions.newBuilder(mAuth)
                                .setPhoneNumber("+91" + phoneNumber)
                                .setTimeout(60L, TimeUnit.SECONDS)
                                .setActivity(User_login.this)
                            
                                .build();
                        PhoneAuthProvider.verifyPhoneNumber(options);
                        new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
                            @Override
                            public void onVerificationCompleted(@NonNull @org.jetbrains.annotations.NotNull PhoneAuthCredential phoneAuthCredential) {
                                progressBar.setVisibility(View.GONE);
                                otp_login.setVisibility(View.VISIBLE);
                            }

                            @Override
                            public void onVerificationFailed(@NonNull @org.jetbrains.annotations.NotNull FirebaseException e) {

                                progressBar.setVisibility(View.GONE);
                                otp_login.setVisibility(View.VISIBLE);
                                Toast.makeText(User_login.this,"Some error occured" + e.getMessage(), Toast.LENGTH_LONG).show();

                            }

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

                                Intent intent = new Intent(getApplicationContext(),opt_verify.class);
                                intent.putExtra("phone", editTextphone.getText().toString());
                                intent.putExtra("mVerificationId", s);

                                startActivity(intent);


                            }
                        };
                    }else{
                        Toast.makeText(User_login.this,"Please enter complete number",Toast.LENGTH_LONG).show();
                    }
                }else{
                    Toast.makeText(User_login.this,"Please enter mobile number",Toast.LENGTH_LONG).show();
                }

            }
        });
    }

    @Override
    protected void onStart() {
        super.onStart();

        if(mAuth.getCurrentUser() != null){
            startActivity(new Intent(this, home_user.class));
        }
    }
}

【问题讨论】:

    标签: android firebase firebase-authentication


    【解决方案1】:

    您应该在 onClick Listner 中获取 EditText 输入,然后才能从 edittext 中获取最新输入的值。

    即,

    String phoneNumber = editTextphone.getText().toString().trim();
    

    应该在内部调用:

    otp_login.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    String phoneNumber = editTextphone.getText().toString().trim(); //like this
                    if(!phoneNumber.isEmpty()){
    

    【讨论】:

    • 试过了,还是一样的错误,“输入电话号码”
    【解决方案2】:

    你的逻辑有问题。原因是您在单击按钮之前获取文本,同时当 onCreate 方法运行时它从 EditText 获取值。但是每次单击按钮时都需要获取值。 试试这个代码:

    otp_login.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        String phoneNumber = editTextphone.getText().toString().trim();
        if (!phoneNumber.isEmpty()) {
            if (phoneNumber.length() == 10) {
                //you logic or code here
            }
        }
      }
    }
                    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-23
      • 2020-01-28
      • 2021-04-03
      • 2021-06-11
      • 1970-01-01
      相关资源
      最近更新 更多