如何使用DiffUtil适配器解决一些超出范围的问题

时间:2019-06-01 07:21:03

标签: java android firebase firebase-realtime-database

我正在将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) { }

                }


            }
        }

上面的代码是如何使用responseadd的所有用户添加到列表的一般思路。到目前为止一切顺利,在for循环之后,我得到了一个列表,其中包含所有用户以及来自第一个响应的用户信息。 问题是,这仅在初始response上有效,但是服务器有不间断的响应,因此每次都应  2个列表:旧列表和新列表,以与DiffUtil进行比较,然后使用mAdapter.updateList(myDataset);

但是我遇到范围问题,我不知道在何处应用mAdapter.updateList(myDataset);以及如何保存旧列表以及在何处添加新列表,以便它可以正常工作。如果需要,我将添加我的DiffUtil适配器类

0 个答案:

没有答案