【发布时间】:2018-06-18 21:18:19
【问题描述】:
我处于必须从 Callback 获取 firebase 数据库引用的情况。它工作得很好,因为我能够读/写数据库。
public void readData(final MyCallback myCallback) {
mCurrentUserDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String university = dataSnapshot.child("university").getValue().toString();
String groupid = dataSnapshot.child("groupid").getValue().toString();
//Having acquired university and group ID, now we can get reference to group members list
mMembersDatabase = FirebaseDatabase.getInstance().getReference().child("Universities").child(university).child("Groups").child(groupid).child("Members");
myCallback.onCallback(mMembersDatabase);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
}
然后,在我的活动的 onStart() 方法中,我正在创建我的 FirebaseRecyclerAdapter。因为它需要 4 个参数:
- 模型类
- 资源布局文件
- 视图持有者类
- firebase 数据库参考
我需要将我从回调中获得的 firebase 数据库引用作为参数传递。 我在 onStart() 中尝试了以下操作,但它不起作用。
readData(new MyCallback() {
@Override
public void onCallback(DatabaseReference databaseReference) {
FirebaseRecyclerAdapter<Groupmates, GroupmatesViewHolder> firebaseRecyclerAdapter =
new FirebaseRecyclerAdapter <Groupmates, GroupmatesViewHolder> (
Groupmates.class,
R.layout.users_single_layout,
GroupmatesViewHolder.class,
databaseReference
) {
@Override
protected void populateViewHolder(final GroupmatesViewHolder groupmatesViewHolder, final Groupmates groupmates, final int position) {
//SOME LOGIC HERE
}
};
//Finally, setting the ready adapter to the RecyclerView
mGroupmatesList.setAdapter(firebaseRecyclerAdapter);
}
});
如果我尝试在回调之外创建 FirebaseRecyclerAdapter,则会收到空对象引用异常。
我真的无法摆脱它。任何建议都会有所帮助。
【问题讨论】:
-
为什么需要在onStart()中调用
readData()? -
它实际上是一个片段,是选项卡布局的一部分。我认为选择特定选项卡时,应加载数据。 span>
标签: java android firebase firebase-realtime-database android-recyclerview