我正在从服务器(不是Firebase服务器)获取用户ID的JSON数组。 我还将每个用户的图像存储在Firebase存储中。我有一个用户数据集,其中包含用户ID和用户图像URL。 JSON响应不断更新,因此每次调用我都会收到来自服务器的新响应以及新的用户ID列表。我想出的唯一解决方案是:
清除数据集>遍历JSON数组以将所有用户添加到空数据集>通知数据集已更改。
这样做的问题是效率不高:我会通知每次迭代更改的数据集,并且由于我会(从远程服务器)清除每个新响应的数据集,因此列表会刷新,而不是简单地添加/删除必要的用户。
这是代码的外观:
@Override
public void onResponse(JSONArray response) { // the JSON ARRAY response of user ids ["uid1", "uid334", "uid1123"]
myDataset.clear(); // clear dataset to prevent duplicates
for (int i = 0; i < response.length(); i++) {
try {
String userKey = response.get(i).toString(); // the currently iterated user id
final DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference userKeyRef = rootRef.child("users").child(userKey); // reference to currently iterated user
ValueEventListener listener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
myDataset.add(new User(dataSnapshot.getKey(), dataSnapshot.child("imageUrl").getValue().toString())); //add new user: id and image url
mAdapter.notifyDataSetChanged(); // notify data set changed after adding each user (Not very efficient, huh?)
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage());
}
};
userKeyRef.addListenerForSingleValueEvent(listener);
}
catch (JSONException e) { Log.d(TAG, "message " + e); }
}