getFullName: не удалось разобрать число

#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