Android: если функция работает без уникального идентификатора пользователя и пользователь не аутентифицирован в Firebase

Я пытаюсь проверить наличие ошибок на моем экране входа в систему, который подключен к Firebase, OnCompleteListener, который я использую, проверяет, если:

1) Пользователь уже зарегистрировался или нет

2) Если пользователь предоставил мне информацию в моей базе данных

Всякий раз, когда пользователь вводит электронное письмо, которое не аутентифицировано, оно также говорит ему предоставить информацию (проверка наличия уникального идентификатора для нуля), но этого не должно происходить, или, другими словами, почему if (task.isComplete() && !task.isSuccessful()) Запускать при отсутствии уникального идентификатора и пользователя

Вот код OnCompleteListener, игнорируйте OnSuccesslistener

Task<AuthResult> authResultTask = firebaseAuth.signInWithEmailAndPassword(Email, Password)
    // if login is complete
    .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            // dismisses progressbar and checks if the users has already given Essential Information, 
            // If not it will take him to the essential information activity
            progressDialog.dismiss();

            if (task.isComplete() && !task.isSuccessful()){
                // Checks if user has submitted information in the Essential Information activity
                // Takes the Unique ID(if it is present if not it will tell him to sign up or invalid email) 
                // asks the firebase database if he has given information to the database
                FirebaseUser user = firebaseAuth.getCurrentUser();
                String UserUID = user.getUid();
                reference.child("Users").child(UserUID).addValueEventListener(new ValueEventListener() {

                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        // User exists
                        if (dataSnapshot.exists()) {
                            //Displays Toast telling user that their information is saved in the database
                            Toast.makeText(LogInActivity.this, "You have data in our database ", Toast.LENGTH_SHORT).show();
                        }
                        //User doesn't have information in the database
                        else {
                            // Displays Toast telling user he/she needs to sign in into the firebase database
                            // User goes to UserInformationActivity to give his/her information
                            Toast.makeText(LogInActivity.this, "You need to give Essential Information", Toast.LENGTH_SHORT).show();

                            // 3 second delay
                            final Handler handler = new Handler();
                            handler.postDelayed(new Runnable() {
                                @Override
                                public void run() {
                                    // Goes to UserInformationActivity
                                    Intent GoToUserInformation = new Intent(LogInActivity.this, UserInformationActivity.class);
                                    LogInActivity.this.startActivity(GoToUserInformation);
                                }
                            }, 3000);
                        }
                    }

                    // if the checking got cancelled, likability of that happening is small
                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }

                });
            }

            if (!task.isSuccessful()) {
                try {
                    throw task.getException();
                } catch(FirebaseAuthInvalidUserException e) {
                    Toast.makeText(LogInActivity.this, "Invalid email, You need to sign up first", Toast.LENGTH_SHORT).show();
                    // 3 second delay
                    final Handler handler = new Handler();
                    handler.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            // Goes to UserInformationActivity
                            Intent Signup = new Intent(LogInActivity.this, SignupActivity.class);
                            LogInActivity.this.startActivity(Signup);
                        }
                    }, 3000);
                } catch(Exception e) {
                    Toast.makeText(LogInActivity.this, "", Toast.LENGTH_SHORT).show();
                    Log.e("Exception", e.getMessage());
                }
            }

        }

    })
    .addOnSuccessListener(new OnSuccessListener<AuthResult>() {
        @Override
        public void onSuccess(AuthResult authResult) {
            Toast.makeText(LogInActivity.this, "SuccesListener working", Toast.LENGTH_SHORT).show();
        }
    });

Это выглядит действительно странно по сравнению с официальные документы. Где ты взял этот код?

André Kool 05.04.2018 17:23

Ваш task.iscomplete() является избыточным в вашем первом операторе if. Посмотрите на метод, которым вы пользуетесь, public void onComplete(...). Вам нужен только task.isSuccessful()

Michael 05.04.2018 17:25

@ AndréKool Многие источники, в основном, я написал его сам, он использует снимки данных для проверки дочернего элемента, называемого «пользователи» в базе данных, и если данных нет, он перейдет к действию, чтобы дать информацию, есть комментарии, но если вы Любые вопросы, не стесняйтесь спрашивать :)

Gobe lina 05.04.2018 17:27

@Michael Да, но если я поставлю task.isSuccessful(), OnSuccessListener будет работать, я не хочу, чтобы пользователь видел, что «Successlistener работает, если вход в систему не на 100% правильный, это означает, что он предоставил информацию в базу данных и уже зарегистрировался.

Gobe lina 05.04.2018 17:30

Может быть, у вас в настоящее время есть зарегистрированный пользователь, данные которого все еще находятся в системе? Вы всегда должны проверять текущего пользователя в соответствии с документами.

Ashish Yadav 05.04.2018 17:31

@Ashish Пользователь должен автоматически выходить из системы, когда я перезапускаю приложение, потому что я не сохраняю текущего пользователя из активности регистрации и не отправляю его в журнал, он не должен сохранять вошедшего в систему пользователя

Gobe lina 05.04.2018 17:35

Что происходит, когда вы удаляете! из первого оператора if?

André Kool 05.04.2018 17:40

В чем причина использования! Task.isSuccessful () дважды? Думаю, у вас должен быть task.isSuccessful () в первом операторе. Спасибо Андре.

Ashish Yadav 05.04.2018 17:44

@ AndréKool Такая же проблема сохраняется, когда я удалил task.isComplete() и удалил! из task.isSuccessful() Я обнаружил, что он работает немного более правильно, но я хочу, чтобы он запускался ТОЛЬКО, если пользователь зарегистрирован, НО он не предоставил никакой информации в базу данных, в настоящее время, когда я подписываюсь с электронной почтой, которая не t аутентифицирован с помощью firebase, он говорит мне зарегистрироваться (это то, что я хочу), и он также говорит мне, что мне нужно предоставить информацию (не должно происходить)

Gobe lina 05.04.2018 17:45

Небольшое обновление: удаление! из task.isSuccessful(), похоже, запускает оператор if, даже если я предоставил информацию в базу данных (этого не должно происходить), но он работает, когда у кого-то есть учетная запись, и она еще не предоставила информацию в базу данных

Gobe lina 05.04.2018 18:03
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
10
46
0

Другие вопросы по теме