#java #android #firebase-authentication
#java #Android #firebase-аутентификация
Вопрос:
я пытаюсь войти в систему, используя данные, которые хранятся в базе данных firebase в реальном времени, и когда я пытаюсь войти в систему с номером телефона, это выдает ошибку, и функция ondatachange не работает.
public class LoginActivity extends AppCompatActivity {
Button Log_in, sign_up;
CountryCodePicker countryCodePicker;
TextInputLayout number, password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
Log_in = findViewById(R.id.Log_in);
sign_up = findViewById(R.id.sign_up);
number = findViewById(R.id.number);
password = findViewById(R.id.password);
countryCodePicker = findViewById(R.id.Login_ccp);
}
public void callHomrScreen(View view) {
if (!validateNumber() | !validatePassword()){
return;
}
//getting data
String _phoneNumber = number.getEditText().getText().toString().trim();
String _password = password.getEditText().getText().toString().trim();
if (_phoneNumber.charAt(0)=='0'){
_phoneNumber=_phoneNumber.substring(1);
}
String _completePhoneNumber = " " countryCodePicker.getFullNumber() _phoneNumber;
//???DatabaseQuery
Query chekUser = FirebaseDatabase.getInstance().getReference("Users").orderByChild("phoneNumber").equalTo(_completePhoneNumber);
chekUser.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (snapshot.exists()){
number.setError(null);
number.setErrorEnabled(false);
String systemPassword=snapshot.child(_completePhoneNumber).child("password").getValue(String.class);
if (systemPassword.equals(_password)){
password.setError(null);
password.setErrorEnabled(false);
}else{
Toast.makeText(LoginActivity.this, "Password Doesnot Exist!", Toast.LENGTH_SHORT).show();
}
}else{
Toast.makeText(LoginActivity.this, "User Doesnot Exist!", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Toast.makeText(LoginActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
public void callRegisterActivity(View view) {
startActivity(new Intent(getApplicationContext(), RegisterActivity.class));
}
private boolean validateNumber() {
String val = number.getEditText().getText().toString().trim();
if (val.isEmpty()) {
number.setError("field cannot be empty");
return false;
} else {
number.setError(null);
number.setErrorEnabled(false);
return true;
}
}
private boolean validatePassword() {
String val = password.getEditText().getText().toString().trim();
String checkPassword = "^"
"(?=.*[0-9])" //at least 1 digit
"(?=.*[a-z])" //at least 1 lower case letter
"(?=.*[A-Z])" //at least 1 upper case letter
"(?=.*[a-zA-Z])" //any letter
"(?=.*[@#$%^amp; =])" //at least 1 special character
"(?=\S $)" //no white spaces
".{4,}" //at least 4 characters
"$";
if (val.isEmpty()) {
password.setError("field cannot be empty");
return false;
}
//else if (!val.matches(checkPassword)){
// password.setError("password should contain atleast 4 charecter");
// return false;
//}
else {
password.setError(null);
password.setErrorEnabled(false);
return true;
}
}
}
Ошибка
E / CCP: getFullNumber: не удалось разобрать число
E / CCP: getFullNumber: не удалось разобрать число
Ошибка E / OpenGLRenderer: GL: 0x506
A / OpenGLRenderer: ошибки GL! frameworks/base/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp:126
A / libc: фатальный сигнал 6 (SIGABRT), код -1 (SI_QUEUE) в tid 9153 (RenderThread), pid 9112
Комментарии:
1. Привет и добро пожаловать в SO 🙂 Пожалуйста, рассмотрите возможность сокращения вашего кода до абсолютно необходимого и попробуйте отформатировать его (чтобы его было легче читать). Также было бы очень полезно краткое изложение вашей проблемы, что вы пытаетесь сделать, что вы делаете и когда возникает проблема. Простая публикация кода и сообщения об ошибке не очень привлекательна для чтения в первую очередь.
2. от чего вы получаете ответ
countryCodePicker.getFullNumber()
?
Ответ №1:
попробуйте заменить countryCodePicker.getFullNumber()
на countryCodePicker.getSelectedCountryCode
итак, строка вашего телефонного номера:
String _completePhoneNumber = " " countryCodePicker.getSelectedCountryCode() _phoneNumber;
используя getSelectedCountryCode
, вы получаете только числовой код, например: 1,91, 81, и вы получаете вывод, подобный: 1xxxxxxxxxx