我正在尝试使用嵌套查询填充回收站视图.第一个查询转到groups_List节点,并获取节点中的数据和唯一键.然后它使用密钥进入组节点并获取该密钥下的数据.两个查询的结果都需要在recycleler视图中更新.
简而言之,第一个查询获取一些数据和一个键,该键用于进行第二次查询.需要在回收器视图中更新这两个查询的结果.我正在使用模型类和回收器视图适配器.
但我在下面收到错误.
我的片段如下:
// Firebase fbDatabaseRootNode = FirebaseDatabase.getInstance().getReference(); fbDatabaseRefGroupList = fbDatabaseRootNode.child("groups_List").child(current_user_ID); fbDatabaseRefGroups = fbDatabaseRootNode.child("groups"); fbDatabaseRefGroupList.addValueEventListener(new ValueEventListener() { @OverrIDe public voID onDataChange(@NonNull DataSnapshot dataSnapshot) { // Array to Get Group List lGroupsList = new ArrayList<>(); if (dataSnapshot.exists()) { // Clear Array to Get Group List lGroupsList.clear(); for (DataSnapshot glSnapshot : dataSnapshot.getChildren()) { // Use The Model To Format Array List and Pass It Into It GroupsListModel g = glSnapshot.getValue(GroupsListModel.class); // Array to Get Group List lGroupsList.add(g); String groupID = String.valueOf(glSnapshot.getKey()); fbDatabaseRefGroups.child(groupID).addValueEventListener(new ValueEventListener() { @OverrIDe public voID onDataChange(@NonNull DataSnapshot dataSnapshot) { if (dataSnapshot.exists()) { for (DataSnapshot gSnapshot : dataSnapshot.getChildren()) { // Use The Model To Format Array List and Pass It Into It GroupsListModel g = gSnapshot.getValue(GroupsListModel.class); // Array to Get Group List lGroupsList.add(g); } } } @OverrIDe public voID onCancelled(@NonNull DatabaseError databaseError) { } }); } aGroupList = new Groupslistadapter(getContext(), lGroupsList); rvGroupList.setAdapter(aGroupList); } } @OverrIDe public voID onCancelled(@NonNull DatabaseError databaseError) { System.out.println("The read Failed: " + databaseError.getCode()); } });
我的Firebase数据库结构看起来像
"groups" : { "-LaPfENd0G4pHlejrcd6" : { "group_creation_date" : 1553078221782, "group_logo" : "0", "group_member_count" : "0", "group_name" : "dog lovers", "group_tagline" : "we love dogs..." }, "-LaPhG0YHnF3FG0Czxom" : { "group_creation_date" : 1553078751686, "group_logo" : "0", "group_member_count" : "0", "group_name" : "hi", "group_tagline" : "hello" } }, "groups_List" : { "F81wvGx9a7fXRrfVPQMhQtkM0wv2" : { "-LaPfENd0G4pHlejrcd6" : { "block_status" : "0", "hIDe_status" : "0", "notification_status" : "0", "pin_sequence" : "0", "report_status" : "0" }, "-LaPhG0YHnF3FG0Czxom" : { "block_status" : "0", "hIDe_status" : "0", "notification_status" : "0", "pin_sequence" : "0", "report_status" : "0" } } },
模型类是
public class GroupsListModel { private String block_status; private String hIDe_status; private String notification_status; private String pin_sequence; private String report_status; private String group_name; private Long group_creation_date; private String group_logo; private String group_member_count; private String group_tagline; public GroupsListModel() { } public GroupsListModel(String block_status, String hIDe_status, String notification_status, String pin_sequence, String report_status, String group_name, Long group_creation_date, String group_logo, String group_member_count, String group_tagline) { this.block_status = block_status; this.hIDe_status = hIDe_status; this.notification_status = notification_status; this.pin_sequence = pin_sequence; this.report_status = report_status; this.group_name = group_name; this.group_creation_date = group_creation_date; this.group_logo = group_logo; this.group_member_count = group_member_count; this.group_tagline = group_tagline; } public String getBlock_status() { return block_status; } public voID setBlock_status(String block_status) { this.block_status = block_status; } public String getHIDe_status() { return hIDe_status; } public voID setHIDe_status(String hIDe_status) { this.hIDe_status = hIDe_status; } public String getNotification_status() { return notification_status; } public voID setNotification_status(String notification_status) { this.notification_status = notification_status; } public String getPin_sequence() { return pin_sequence; } public voID setPin_sequence(String pin_sequence) { this.pin_sequence = pin_sequence; } public String getReport_status() { return report_status; } public voID setReport_status(String report_status) { this.report_status = report_status; } public String getGroup_name() { return group_name; } public voID setGroup_name(String group_name) { this.group_name = group_name; } public Long getGroup_creation_date() { return group_creation_date; } public voID setGroup_creation_date(Long group_creation_date) { this.group_creation_date = group_creation_date; } public String getGroup_logo() { return group_logo; } public voID setGroup_logo(String group_logo) { this.group_logo = group_logo; } public String getGroup_member_count() { return group_member_count; } public voID setGroup_member_count(String group_member_count) { this.group_member_count = group_member_count; } public String getGroup_tagline() { return group_tagline; } public voID setGroup_tagline(String group_tagline) { this.group_tagline = group_tagline; }}
错误是
Can't convert object of type java.lang.Long to type com.example.myproject
来自数据快照的日志如下……首先……
来自第二个的日志……
可能的解决方案1(传递给回收站查看其他工作的问题)
这似乎是以正确的顺序获取数据,现在只需将其传递到模型阵列列表并设置适配器
// Get The DatafbDatabaseRefGroupList.addChildEventListener(new ChildEventListener() { @OverrIDe public voID onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) { if (dataSnapshot.exists()) { final String groupID = dataSnapshot.getKey(); final String blockStatus = (String) dataSnapshot.child("block_status").getValue(); final String hIDeStatus = (String) dataSnapshot.child("hIDe_status").getValue(); final String notificationStatus = (String) dataSnapshot.child("notification_status").getValue(); final String pinSequence = (String) dataSnapshot.child("pin_sequence").getValue(); final String reportStatus = (String) dataSnapshot.child("report_status").getValue(); fbDatabaseRefGroups.child(groupID).addListenerForSingleValueEvent(new ValueEventListener() { @OverrIDe public voID onDataChange(@NonNull DataSnapshot dataSnapshot) { String groupname = (String) dataSnapshot.child("group_name").getValue(); String groupTagline = (String) dataSnapshot.child("group_name").getValue(); String groupMemberCount = (String) dataSnapshot.child("group_name").getValue(); } @OverrIDe public voID onCancelled(@NonNull DatabaseError databaseError) { } }); } } @OverrIDe public voID onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) { } @OverrIDe public voID onChildRemoved(@NonNull DataSnapshot dataSnapshot) { } @OverrIDe public voID onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) { } @OverrIDe public voID onCancelled(@NonNull DatabaseError databaseError) { }});
可能的解决方案2(列表合并是一个问题 – 否则工作)
// Firebase fbDatabaseRootNode = FirebaseDatabase.getInstance().getReference(); fbDatabaseRefGroupList = fbDatabaseRootNode.child("groups_List").child(current_user_ID); fbDatabaseRefGroups = fbDatabaseRootNode.child("groups"); // Array to Get Group List lGroupsListList = new ArrayList<>(); lGroupsList = new ArrayList<>(); lCombinedList = new ArrayList<>(); // Clear Array to Get Group List lGroupsList.clear(); // Clear Array to Get Group List lGroupsListList.clear(); // Clear Array to Get Group List lCombinedList.clear(); ValueEventListener valueEventListener = new ValueEventListener() { @OverrIDe public voID onDataChange(DataSnapshot dataSnapshot) { for (DataSnapshot ds : dataSnapshot.getChildren()) { // Use The Model To Format Array List and Pass It Into It GroupsListModel g = ds.getValue(GroupsListModel.class); // Array to Get Group List lGroupsListList.add(g); final String key = ds.getKey(); final String blockStatus = (String) ds.child("block_status").getValue(); DatabaseReference keyRef = fbDatabaseRootNode.child("groups").child(key); ValueEventListener eventListener = new ValueEventListener() { @OverrIDe public voID onDataChange(DataSnapshot dataSnapshot) { // Use The Model To Format Array List and Pass It Into It GroupsListModel g = dataSnapshot.getValue(GroupsListModel.class); // Array to Get Group List lGroupsList.add(g); String groupname = (String) dataSnapshot.child("group_name").getValue(); Log.d(TAG, "groupdetails: " + key + "--" + groupname + "--" + blockStatus); } @OverrIDe public voID onCancelled(@NonNull DatabaseError databaseError) { Log.d(TAG, databaseError.getMessage()); //Don't ignore errors! } }; keyRef.addListenerForSingleValueEvent(eventListener); } } @OverrIDe public voID onCancelled(@NonNull DatabaseError databaseError) { Log.d(TAG, databaseError.getMessage()); //Don't ignore errors! } }; aGroupList = new Groupslistadapter(getContext(), lGroupsList); rvGroupList.setAdapter(aGroupList); fbDatabaseRefGroupList.addListenerForSingleValueEvent(valueEventListener);
@Prateek Jain您的回答是错误的,请参见下面的截图:
基于Prateek Jains输入的工作解决方案
public class GroupsListFragment extends Fragment { private static final String TAG = "GroupsListFragment"; // Recycler VIEw private RecyclerVIEw rvGroupList; private Groupslistadapter aGroupList; private List<GroupsListModel> lGroupsListList; private List<GroupsListModel> lGroupsList; private List<GroupsListModel> lCombinedList; // Firebase private FirebaseAuth mAuth; private DatabaseReference fbDatabaseRootNode; private DatabaseReference fbDatabaseRefGroupList; private DatabaseReference fbDatabaseRefGroups; private String current_user_ID; private String groupID; private List<String> lgroupIDs; @Nullable @OverrIDe public VIEw onCreateVIEw(@NonNull LayoutInflater inflater, @Nullable VIEwGroup container, @Nullable Bundle savedInstanceState) { VIEw vIEw = inflater.inflate(R.layout.fragment_groups_List, container, false); mAuth = FirebaseAuth.getInstance(); current_user_ID = mAuth.getCurrentUser().getUID(); // Init Recycler VIEw rvGroupList = vIEw.findVIEwByID(R.ID.f_groups_List_groups_List); rvGroupList.setHasFixedSize(true); rvGroupList.setLayoutManager(new linearlayoutmanager(getActivity())); // Firebase fbDatabaseRootNode = FirebaseDatabase.getInstance().getReference(); fbDatabaseRefGroupList = fbDatabaseRootNode.child("groups_List").child(current_user_ID); fbDatabaseRefGroups = fbDatabaseRootNode.child("groups"); // Get The Data fbDatabaseRefGroupList.addChildEventListener(new ChildEventListener() { @OverrIDe public voID onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) { // Array to Get Group List lGroupsList = new ArrayList<>(); if (dataSnapshot.exists()) { // Clear Array to Get Group List lGroupsList.clear(); final String groupID = dataSnapshot.getKey(); final String blockStatus = (String) dataSnapshot.child("block_status").getValue(); final String hIDeStatus = (String) dataSnapshot.child("hIDe_status").getValue(); final String notificationStatus = (String) dataSnapshot.child("notification_status").getValue(); final String pinSequence = (String) dataSnapshot.child("pin_sequence").getValue(); final String reportStatus = (String) dataSnapshot.child("report_status").getValue(); fbDatabaseRefGroups.child(groupID).addListenerForSingleValueEvent(new ValueEventListener() { @OverrIDe public voID onDataChange(@NonNull DataSnapshot dataSnapshot) { Long groupCreationDate = (Long) dataSnapshot.child("group_creation_date").getValue(); String grouplogo = (String) dataSnapshot.child("group_logo").getValue(); String groupMemberCount = (String) dataSnapshot.child("group_member_count").getValue(); String groupname = (String) dataSnapshot.child("group_name").getValue(); String groupTagline = (String) dataSnapshot.child("group_tagline").getValue(); lGroupsList.add(new GroupsListModel(blockStatus, hIDeStatus, notificationStatus, pinSequence, reportStatus, groupname, groupCreationDate, grouplogo, groupMemberCount, groupTagline)); aGroupList.notifyDataSetChanged(); } @OverrIDe public voID onCancelled(@NonNull DatabaseError databaseError) { } }); aGroupList = new Groupslistadapter(getContext(), lGroupsList); rvGroupList.setAdapter(aGroupList); } } @OverrIDe public voID onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) { } @OverrIDe public voID onChildRemoved(@NonNull DataSnapshot dataSnapshot) { } @OverrIDe public voID onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) { } @OverrIDe public voID onCancelled(@NonNull DatabaseError databaseError) { } }); return vIEw; }}
解决方法:
您必须将所需数据添加到适配器用于呈现视图的列表中.完成后,您必须调用notifyDataSetChanged,以便适配器可以从更新的列表重新加载其数据.
fbDatabaseRefGroups.child(groupID).addListenerForSingleValueEvent(new ValueEventListener() { @OverrIDe public voID onDataChange(@NonNull DataSnapshot dataSnapshot) { String groupname = (String) dataSnapshot.child("group_name").getValue(); String groupTagline = (String) dataSnapshot.child("group_name").getValue(); String groupMemberCount = (String) dataSnapshot.child("group_name").getValue(); lGroupsList.add(new GroupsListModel(groupname, groupMemberCount, groupTagline)); aGroupList.notifyDataSetChanged(); } @OverrIDe public voID onCancelled(@NonNull DatabaseError databaseError) { } });
总结 以上是内存溢出为你收集整理的android – 从Firebase中的嵌套查询填充Recycler视图全部内容,希望文章能够帮你解决android – 从Firebase中的嵌套查询填充Recycler视图所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)