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
相关产品推荐
相关产品推荐

