[英]Firebase Phone number authentication error, Phone number not readable
當我在 EditText 字段中輸入電話號碼並按登錄時,java 代碼必須驗證 editText 字段是否為空。 所以輸入我的電話號碼后, if(.phonenumber.isempty())總是為假,執行 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));
}
}
}
您應該在 onClick 列表器中獲取 EditText 輸入,然后才能從 edittext 中獲取最新輸入的值。
IE,
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()){
你的邏輯有問題。 原因是您在單擊按鈕之前獲取文本,同時當 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
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.