我正在将DiffUtil与RecyclerView一起使用以更新列表。
它是这样工作的:我使用自定义POST请求从PHP脚本获取用户ID列表。该列表以response
数组的形式返回,并带有所有用户ID。
对于每个用户ID,我需要获取更多数据-用户图像,该数据存储在Firebase数据库中。获得正确的信息后,将用户添加到要显示的列表中。我正在尝试使用DiffUtil,以便从服务器获得新的response
之后,需要将旧列表与新列表进行比较。但是我遇到范围问题。看起来是这样:
CustomRequest customRequest = new CustomRequest(Request.Method.POST, url, params,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
for (int i = 0; i < response.length(); i++) {
try {
String userKey = response.getJSONObject(i).getString("userId");
final DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference userKeyRef = rootRef.child("users").child(userKey);
ValueEventListener listener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// adding new User (User is a private class)
myDataset.add(new User(dataSnapshot.getKey(), dataSnapshot.child("userImageUrl").getValue().toString()));
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
};
userKeyRef.addListenerForSingleValueEvent(listener);
}
catch (JSONException e) { }
}
}
}
上面的代码是如何使用response
将add
的所有用户添加到列表的一般思路。到目前为止一切顺利,在for
循环之后,我得到了一个列表,其中包含所有用户以及来自第一个响应的用户信息。
问题是,这仅在初始response
上有效,但是服务器有不间断的响应,因此每次都应
2个列表:旧列表和新列表,以与DiffUtil
进行比较,然后使用mAdapter.updateList(myDataset);
但是我遇到范围问题,我不知道在何处应用mAdapter.updateList(myDataset);
以及如何保存旧列表以及在何处添加新列表,以便它可以正常工作。如果需要,我将添加我的DiffUtil
适配器类