SharedPreferences помещает нулевые значения в ValueEventListener - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь найти соответствие правого узла в моей базе данных Firebase и сохранить значения в SharedPreferences.Я перебираю каждый узел в Firebase с помощью ValueEventListener.Но когда я пытаюсь распечатать значения, которые я только что поместил в SharedPreferences, он показывает ноль для всех полей.

Я уже проверил, есть ли исключение, проверив значение commit (), но оно возвращает true.

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

Я также подумал, что это может быть проблемой с несовместимыми контекстами, но «sharedpref» и «редактор» оба используют один и тот же контекст действия.И у меня не было проблем с доступом к данным, которые я хочу в других видах деятельности.

Здесь я перебираю свои узлы Firebase:

final String name = et_name.getText().toString();
DatabaseReference rootref = FirebaseDatabase.getInstance().getReference();
rootref.child("drivers_" + sharedPref.getString("frat_code", null))
    .orderByChild("first_name")
    .addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            boolean found = false;
            iterateFirebase:
            for(DataSnapshot node: dataSnapshot.getChildren()) {
                Driver driver = node.getValue(Driver.class);
                if((driver.getName() != null) && (driver.getName().equals(name))) {
                    found = true;
                    editor.putString(driver.getName(), "name");
                    editor.putString(driver.getOccupants(), "occupants");
                    editor.putString(driver.getPhone(), "phone");
                    editor.putString(driver.getMake(), "make");
                    editor.putBoolean("isLogged", true);
                    editor.apply();
                    Log.d(TAG, "Values retrieved from Firebase node: " +
                        driver.getName() + ", " + driver.getOccupants() +
                        ", " + driver.getMake() + ", " +
                        driver.getPhone());
                    Log.i(TAG, "Following user logged in: " +
                        sharedPref.getString("name", null) + ", " +
                        sharedPref.getString("occupants", null) +
                        ", " + sharedPref.getString("phone", null) +
                        ", " + sharedPref.getString("make", null) +
                        ", " + sharedPref.getBoolean("isLogged",
                            false));
                    Intent intent = new Intent(IfYes.this,
                        MainActivity.class);
                    IfYes.this.startActivity(intent);
                    break iterateFirebase;
                }
            }

Вот журналы для приведенных выше операторов журнала:

Values retrieved from Firebase node: John Smith, 4, Honda Civic, Black, 
+11234567890
Following user logged in: null, null, null, null, true

Заранее спасибо за помощь,Кроме того, я все еще новичок, так что любая критика стиля кода будет признательна, если что-то выделяется.

1 Ответ

0 голосов
/ 28 ноября 2018

Примечание:

editor.putString(driver.getName(), "name");
editor.putString(driver.getOccupants(), "occupants");
editor.putString(driver.getPhone(), "phone");
editor.putString(driver.getMake(), "make");

должно быть:

editor.putString("name", driver.getName());
editor.putString("occupants", driver.getOccupants());
editor.putString("phone", driver.getPhone());
editor.putString("make", driver.getMake());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...