FIrebaseREcyclerAdapter设置为值列表

时间:2017-04-30 22:24:52

标签: android firebase firebase-realtime-database denormalization

我有 'userrecords / userid / recordid'和'users / userid(完整记录)/ subscriptions / userid(只是userid = true to index)'结构。

目标很简单:通过FirebaseREcylcerAdapter显示“与添加到订阅的用户ID相关的所有活动记录”。

我现在有以下代码:

 DatabaseReference mIdorecords=FirebaseDatabase.getInstance().getReference("users");
    String muid=getUid();
    final DatabaseReference dataRef=FirebaseDatabase.getInstance().getReference("userrecords");

    Query keyData = mIdorecords.child(muid).child("subscriptions");

    keyData.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        finalquery=dataRef.child(dataSnapshot.getKey()).orderByChild("status").equalTo("Active");
            mAdapter = new FirebaseRecyclerAdapter<idorecord, PostViewHolder>(idorecord.class, R.layout.idolist_item,
                    PostViewHolder.class, finalquery)

如您所见,我发现如何获取“订阅”中指定的第一个特定用户的记录,但无法理解如何强制为“subcription”中指定的每个用户设置适配器... 请提出建议?

2 个答案:

答案 0 :(得分:0)

您需要使用 ITERABLE 。在下面的示例中,我在列表中的设置中获取数据库中的所有用户对象。

List<User> list = new ArrayList<User>();

    userReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Iterable<DataSnapshot> children = dataSnapshot.getChildren();

            for(DataSnapshot child: children)
            {
                User user= child.getValue(User.class);
                list.add(user); 
//here are all user but you can change userReference.child("something") 
//remenber of change User.class for type of you want. String.class, Long.class, etc
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });

答案 1 :(得分:0)

    DatabaseReference mIdorecords=FirebaseDatabase.getInstance().getReference("users");
    String muid=getUid();
    final DatabaseReference dataRef=FirebaseDatabase.getInstance().getReference("userrecords");

    Query keyData = mIdorecords.child(muid).child("subscriptions");

    keyData.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
             finalquery=dataRef.child(dataSnapshot.getKey()).orderByChild("status").equalTo("Active");    
             finalquery.addChildEventListener(new ChildEventListener() {

             @Override
             public void onChildAdded(DataSnapshot dataSnapshot, String s) {

                 mAdapter.addItem(dataSnapshot.getValue(Record.class))

修改

我建议在第一个onChildAdded中使用singleValueEventListener以提高效率。