Получить и сравнить ключ и значение из базы данных Firebase Realtime - PullRequest
0 голосов
/ 14 октября 2018

Я пытаюсь создать приложение, в котором пользователь хранит свои Данные.Я использовал общие параметры пользователя, чтобы сохранить данные для входа в систему, но в целях безопасности я выполнил действие (Проверка действия пароля), которое запрашивает пароль пользователя для доступа к данным.Теперь я могу сохранять, извлекать и удалять данные.Но в моей деятельности по проверке пароля я просто хочу получить тот ключ и значение, где хранится пароль.Я не хочу получать полные данные в Подтверждении активности с паролем.

Ниже приведен код, который я использовал для сохранения пароля в базе данных: -

databaseReference.child(uniqueID).setValue(passcode);

Ниже приведен код, которым я являюсьпопытался получить только пароль: -

dbreference.child(uniqueID).orderByChild("passcode").equalTo(pass).addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        if (dataSnapshot.exists()){
            Toast.makeText(getApplicationContext(), "Data exist", Toast.LENGTH_LONG).show();
        }else{
            Toast.makeText(getApplicationContext(), "Data doesn't exist", Toast.LENGTH_LONG).show();
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {

    }
});

Здесь uniqueID равно "abhishek88666kumar", а pass - переменная, используемая для getText().

Вот скриншот моей FirebaseБаза данных: -

Снимок экрана базы данных

Вот снимок экрана подтверждения пароля: -

Verify Passcode Activity Screenshot

Пожалуйста, посмотритена скриншоте базы данных и проверьте скриншот активности пароля.

Повестка дня:

  1. getText () из textView внутри деятельности.

  2. getValueиз базы данных реального времени firebase (только для текущего пользователя. В нашем случае это abhishek88666kumar).

  3. сравните, если 1 и 2 одинаковы или нет.(Если то же самое, тогда перенаправьте в MainActivity, иначе покажите ошибку.)

Пожалуйста, скажите мне, что я делаю неправильно.

Ответы [ 3 ]

0 голосов
/ 14 октября 2018

Это первый способ сравнения данных Firebase.

btnSave.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                passcode = editText.getText().toString();

                Toast.makeText(getApplicationContext(), "Data :"+passcode, Toast.LENGTH_LONG).show();

                DatabaseReference ref = FirebaseDatabase.getInstance().getReference("passcode");
               Query applesQuery = ref.orderByValue().equalTo(passcode);

                applesQuery.addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {


                        if (dataSnapshot.exists()){

                            Toast.makeText(getApplicationContext(), "Data exist", Toast.LENGTH_LONG).show();
                        }else{
                            Toast.makeText(getApplicationContext(), "Data doesn't exist"+passcode, Toast.LENGTH_LONG).show();
                        }
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {
                        // Log.e(TAG, "onCancelled", databaseError.toException());
                    }
                });

            }
        });

Это второй способ сравнения данных Firebase.

btnSave.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            check = editText.getText().toString();

            Toast.makeText(getApplicationContext(), "Data :"+check, Toast.LENGTH_LONG).show();

            DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("passcode");
           // Query applesQuery = ref.child("Customers").orderByChild("abhishek88666kumar").equalTo(passcode);

            ref.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {

                    Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue();
                    if(map.get("abhishek88666kumar")!=null){
                        passcode = map.get("abhishek88666kumar").toString();

                        if (passcode.equals(check))
                        {
                            Toast.makeText(getApplicationContext(), "Data exist", Toast.LENGTH_LONG).show();
                        }
                        else{


                            Toast.makeText(getApplicationContext(), "Data doesn't exist"+check, Toast.LENGTH_LONG).show();
                        }

                    }

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                    // Log.e(TAG, "onCancelled", databaseError.toException());
                }
            });

        }
    });

Оба работают.Надеюсь, это поможет вам.спасибо.

0 голосов
/ 15 октября 2018

Спасибо всем за помощь :) Ваш ответ не сработал для меня, но с помощью ваших ответов и моих немногих знаний я сам решил решение своей проблемы.Вот код, который соответствует моему требованию.Этот код работает именно так, как я хотел.

dbreference = FirebaseDatabase.getInstance().getReference("passcodes");
                    Query query = dbreference.orderByKey().equalTo(currentUser); //current user is "abhishek88666kumar" in this case.
                    query.addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                            if (dataSnapshot.exists()){
                                String passcode = txtPasscode.getText().toString;//Passcode is 1234 in this case.
                                String fetchedValue = "";
                                for (DataSnapshot snap : dataSnapshot.getChildren()){
                                    fetchedValue = (String) snap.getValue();
                                }
                                if (!passcode.equals(fetchedValue)){
                                    Toast.makeText(getApplicationContext(), "Passcode doesn't match.", Toast.LENGTH_LONG).show();
                                }else{
                                    Toast.makeText(getApplicationContext(), "Passcode matched.", Toast.LENGTH_LONG).show();
                                }
                            }else{
                                Toast.makeText(getApplicationContext(), "No passcode found for this user", Toast.LENGTH_LONG).show();
                            }
                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {

                        }
                    });
0 голосов
/ 14 октября 2018

Предполагая, что pass является значением, подобным 1234, эта строка:

dbreference.child(uniqueID).orderByChild("passcode").equalTo(pass).addListenerForSingleValueEvent(...

Должна быть:

FirebaseDatabase.getInstance().getReference("passcodes").orderByValue().equalTo(pass).addListenerForSingleValueEvent(...

Таким образом, DataSnapshot будет содержать все дочерние узлыpasscodes со значением 1234, то есть "abhishek88666kumar" в образце JSON.

Также обязательно изучите документацию по сортировке и фильтрации данных .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...