Тот же код работал бы раньше, но теперь он внезапно перестал работать, ничего не меняя!
Мой код:
private void readData(final ReadData read) {
Log.i("test", "Users 1: " + ref);
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
users.clear();
totalUsers.clear();
Log.i("test", "Users 2: " + ref);
for (DataSnapshot items : snapshot.getChildren()) {
if (items.exists()) {
UserChangeInfo user = items.getValue(UserChangeInfo.class);
assert user != null;
totalUsers.add(user);
if (!user.getNewPassword().equals("")) {
users.add(user);
}
}
}
read.onCallback();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Log.i("test", "Error 1: " + error.getMessage());
Log.i("test", "Error 2: " + error.getDetails());
}
});
}
Здесь Log.i("test", "Users 1: " + ref);
казнят. Но Log.i("test", "Users 2: " + ref);
, Log.i("test", "Error 1: " + error.getMessage());
,
Log.i("test", "Error 2: " + error.getDetails());
не казните.
Итак, похоже, addListenerForSingleValueEvent()
не срабатывает.
Я застрял здесь на несколько дней.
Почему??
Я прочитал так:
readData(new ReadData() {
@Override
public void onCallback() {
Log.i("test", "Users 3: " + ref);
adapter.notifyDataSetChanged();
String s = "Total Users: " + totalUsers.size() + "\n\n\nUpdate Request: " + users.size();
txtTotalChangeReq.setText(s);
if (users.size() > 0){
lstUpdateRequestList.setVisibility(View.VISIBLE);
lstTotalUserList.setVisibility(View.GONE);
showRequestedUsers.setChecked(true);
showAllUser.setChecked(false);
showInactiveUsers.setChecked(false);
String ss = "Change request list";
listLabel.setText(ss);
}
else{
lstTotalUserList.setVisibility(View.VISIBLE);
lstUpdateRequestList.setVisibility(View.GONE);
showAllUser.setChecked(true);
showRequestedUsers.setChecked(false);
showInactiveUsers.setChecked(false);
String ss = "Total user list";
listLabel.setText(ss);
}
}
});
Log.i("test", "Users 4: " + ref);
Но здесь Log.i("test", "Users 3: " + ref);
не выполняется, и здесь ничего не выполняется, кроме этого вызова Log.i("test", "Users 4: " + ref);
.
примечание: есть предупреждение в виде W/System: Ignoring header X-Firebase-Locale because its value was null.
, но все говорят, что это предупреждение не имеет ничего общего с моим кодом.
Н/Б:
ref = FirebaseDatabase.getInstance().getReference().child("change request");
ref = https://myFirebaseAppLink/change%20request
implementation platform('com.google.firebase:firebase-bom:26.1.1')
и другие
зависимости firebase.У меня была почти аналогичная проблема. Используйте временный ArrayList
ex: tmp1
,tmp2
вместо users
и totalUsers
, затем передайте эти два ArrayList в read.onCallback(tmp1,tmp2)
.[внутри метода private void readData (1-й код)]. Затем внутри вашего readData>onCallBack[2nd code]
users.clear();
totalUsers.clear();
users.addAll(tmp1);
totalUsers.addAll(tmp2);
тогда делай свою работу.