Я пытаюсь найти соответствие нужного узла в моей базе данных Firebase и сохранить значения в SharedPreferences. Я перебираю каждый узел в Firebase с помощью ValueEventListener. Но когда я пытаюсь распечатать значения, которые я только что ввел в SharedPreferences, он показывает null для всех полей.
Я уже проверил, есть ли исключение, проверив значение commit (), но оно возвращает true.
Я также подумал, что, возможно, поток завершил свою задачу позже, поэтому я сделал runnable внутри цикла foreach и сделал синхронные задачи. Первый сохранил значения в SharedPreferences, следующий распечатал значения. Но и это не сработало.
Я также подумал, что это может быть проблемой из-за несовместимых контекстов, но sharedpref и editor используют один и тот же контекст активности. И у меня не было проблем с доступом к данным, которые мне нужны в других делах.
Вот где я перебираю свои узлы 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
Заранее спасибо за помощь. Кроме того, я все еще новичок, поэтому любая критика стиля кода будет оценена, если что-то выделяется.
Уведомление:
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());