Android FirebaseIndexRecyclerAdapter-如何从键引用位置获取每个键的值?

Android FirebaseIndexRecyclerAdapter-如何从键引用位置获取每个键的值?,android,firebase,firebase-realtime-database,firebaseui,Android,Firebase,Firebase Realtime Database,Firebaseui,我有以下非规范化数据结构: 联系人可以与多个记录关联。一个记录可以有多个关联联系人(许多关系)。为了跟踪他们的关系,一个int值表示联系人在特定记录中的角色,并将角色值存储在两个单独的引用中 Contact - Contact1:data - Contact2:data - Contact3:data Record - Record1:data - Record2:data Record_Role_Ref - Record1 -- Contact1: roleA -- Contact2:

我有以下非规范化数据结构: 联系人可以与多个记录关联。一个记录可以有多个关联联系人(许多关系)。为了跟踪他们的关系,一个int值表示联系人在特定记录中的角色,并将角色值存储在两个单独的引用中

Contact
- Contact1:data
- Contact2:data
- Contact3:data

Record
- Record1:data
- Record2:data

Record_Role_Ref
- Record1 
-- Contact1: roleA
-- Contact2: roleA
-- Contact3: roleD
- Record2
-- Contact1: roleB

Contact_Role_Ref
- Contact1
-- Record1: roleA
-- Record2: roleB
我使用FirebaseIndexRecyclerAdapter是为了显示特定记录id的关联联系人列表。因此,对于关键引用,我将使用记录\角色\引用/记录\ id,对于数据引用,我将使用联系人,如下所示:

// Setup the reference to the all the associated contact list in record_role_ref, using the record id as key
Query mRecordRoleRef = firebaseDatabase.getReference().child(DB_RECORD_ROLE_REF).child(mRecordId);

// Reference the Contact data ref
Query mContactRef = firebaseDatabase.getReference().child(DB_CONTACT);

FirebaseIndexRecyclerAdapter mContactAdapter = new FirebaseIndexRecyclerAdapter<Contact, ContactViewHolder>(Contact.class,
        R.layout.item_contact,
        ContactViewHolder.class,
        mRecordRoleRef, // The Firebase database location containing the keys associated contacts to this record
        mContactRef)// The Firebase database location to watch for data changes. Each key key found at keyRef's location represents a list item in the RecyclerView.
//使用记录id作为键,在记录\u角色\u ref中设置对所有关联联系人列表的引用
Query mRecordRoleRef=firebaseDatabase.getReference().child(DB\u RECORD\u ROLE\u REF).child(mRecordId);
//参考联系人数据ref
Query mContactRef=firebaseDatabase.getReference().child(DB\u联系人);
FirebaseIndexRecyclerAdapter mContactAdapter=新的FirebaseIndexRecyclerAdapter(Contact.class,
R.layout.item_联系人,
ContactViewHolder.class,
mRecordRoleRef,//Firebase数据库位置,包含与此记录关联的联系人的密钥
mContactRef)//监视数据更改的Firebase数据库位置。在keyRef位置找到的每个键表示RecyclerView中的一个列表项。
限制:我不想在每个联系人和记录对象中存储角色值,因为每次角色更改时,联系人和记录的整个对象都会被获取和更新。用户希望删除、修改、移动联系人和记录,以及更改角色

问题: 联系人的角色值作为密钥值存储在mRecordRoleRef中。是否可能/如何从on-go with FirebaseIndexRecyclerAdapter中的键引用中获取值?在这种情况下,好的/最佳的做法是什么


提前感谢:)

现在,我只是在populateViewHolder回调方法中形成另一个数据读取请求。由于数据读取请求本身也是异步的,我还不确定这是否适用于大型列表以及视图何时回收。populateViewHolder返回的viewHolder设置为final

Query mRecordContactRoleRef = firebaseDatabase.getReference().child(DB_RECORD_CONTACT_ROLE_REF).child(mRecordId).child(mContact.getContactId());

mRecordContactRoleRef.addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        // Getting the role int base on record type
                        Long roleNum = (Long) dataSnapshot.getValue();
                        viewHolder.setContactRoleTv("hi, the role is " + roleNum);
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });

现在,我只是在populateViewHolder回调方法中形成另一个数据读取请求。由于数据读取请求本身也是异步的,我还不确定这是否适用于大型列表以及视图何时回收。populateViewHolder返回的viewHolder设置为final

Query mRecordContactRoleRef = firebaseDatabase.getReference().child(DB_RECORD_CONTACT_ROLE_REF).child(mRecordId).child(mContact.getContactId());

mRecordContactRoleRef.addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        // Getting the role int base on record type
                        Long roleNum = (Long) dataSnapshot.getValue();
                        viewHolder.setContactRoleTv("hi, the role is " + roleNum);
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });