You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase手机号认证时EditText输入手机号仍判定为空的问题求解

问题原因

  • 手机号码取值逻辑位置错误:你在onCreate方法中就执行了String phoneNumber = editTextphone.getText().toString().trim();,onCreate是页面首次创建时才会执行的生命周期方法,此时用户还没有在输入框输入内容,拿到的phoneNumber永远是空值。后续你点击登录按钮时,用的还是这个初始化时的空字符串做判断,所以if(!phoneNumber.isEmpty())始终返回false。
  • 额外隐藏问题:你创建的PhoneAuthProvider.OnVerificationStateChangedCallbacks回调实例没有作为参数传入PhoneAuthProvider.verifyPhoneNumber()方法,后续无法正常接收验证码发送状态、验证结果的回调通知。

修复方案

把手机号码取值逻辑移到点击事件内部,每次点击都读取输入框最新内容,同时补充回调参数即可,修改后的完整代码如下:

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

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

        otp_login = findViewById(R.id.otp_login);
        editTextphone = findViewById(R.id.editTextphone);
        progressBar = findViewById(R.id.progressBar);

        mAuth = FirebaseAuth.getInstance();

        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){

                        progressBar.setVisibility(View.VISIBLE);
                        otp_login.setVisibility(View.INVISIBLE);
                        
                        // 提前实例化回调对象
                        PhoneAuthProvider.OnVerificationStateChangedCallbacks callbacks = 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,"发生错误:" + 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", phoneNumber);
                                intent.putExtra("mVerificationId", s);
                                startActivity(intent);
                            }
                        };
                    
                        PhoneAuthOptions options = PhoneAuthOptions.newBuilder(mAuth)
                                .setPhoneNumber("+91" + phoneNumber)
                                .setTimeout(60L, TimeUnit.SECONDS)
                                .setActivity(User_login.this)
                                .setCallbacks(callbacks) // 传入回调对象
                                .build();
                        PhoneAuthProvider.verifyPhoneNumber(options);
                    }else{
                        Toast.makeText(User_login.this,"请输入完整的10位手机号码",Toast.LENGTH_LONG).show();
                    }
                }else{
                    Toast.makeText(User_login.this,"请输入手机号码",Toast.LENGTH_LONG).show();
                }

            }
        });
    }

    @Override
    protected void onStart() {
        super.onStart();
        if(mAuth.getCurrentUser() != null){
            startActivity(new Intent(this, home_user.class));
        }
    }
}

内容的提问来源于stack exchange,提问作者Arpit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 02:27:05