同样的代码以前可以工作,但现在突然停止工作,没有改变任何东西!
我的代码是:
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 依赖项。答案 0 :(得分:0)
我遇到了几乎类似的问题。使用临时的 ArrayList
例如:tmp1
,tmp2
而不是 users
和 totalUsers
,然后将这两个 ArrayList 传递给 read.onCallback(tmp1,tmp2)
.[inside private void readData 方法(第一个代码)]。然后在你的 readData>onCallBack[2nd code]
users.clear();
totalUsers.clear();
users.addAll(tmp1);
totalUsers.addAll(tmp2);
然后做你的工作。