我正在使用 FirebaseRecyclerOptions
,因为我已升级到新的 FirebaseUI 3.0 版本,但现在我无法从数据库中检索任何内容。相同的代码过去在旧的 FirebaseRecylcerAdapter
方法中运行良好。它似乎甚至没有输入 onBindViewHolder
。
初始化
linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setReverseLayout(true);
linearLayoutManager.setStackFromEnd(true);
recyclerView = findViewById(R.id.main_recycler);
recyclerView.hasFixedSize();
recyclerView.setLayoutManager(linearLayoutManager);
queryDatbase = mDatabase.child("chatlist").child(cUser);
queryDatbase.keepSynced(true);
Query query = queryDatbase.orderByChild("time");
query.keepSynced(true);
FirebaseRecyclerAdapter 代码
firebaseoptions = new FirebaseRecyclerOptions.Builder<ConvModel>().setQuery(query,ConvModel.class).build();
firebaseadapter = new FirebaseRecyclerAdapter<ConvModel, ChatlistHolder>(firebaseoptions) {
@Override
protected void onBindViewHolder(final ChatlistHolder holder, int position,final ConvModel model) {
final String each_user_id = firebaseadapter.getRef(position).getKey();
Toast.makeText(MainActivity.this, each_user_id, Toast.LENGTH_SHORT).show();
//region SET EACH USER IMAGE and USERNAME
assert each_user_id != null;
mDatabase.child("users").child(each_user_id).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String dp = dataSnapshot.child("dp").getValue(String.class);
final String name = dataSnapshot.child("name").getValue(String.class);
holder.setName(name);
holder.setDp(dp,getApplicationContext());
// region OPEN CHAT ACTIVITY
holder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//open other activity
}
});
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(getApplicationContext(),databaseError.getMessage(),Toast.LENGTH_SHORT).show();
}
});//endregion
}
@Override
public ChatlistHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.chatlist_single_item_layout,parent,false);
return new ChatlistHolder(v);
}
};
recyclerView.setAdapter(firebaseadapter);
最佳答案
从 FirebaseUI 3.0 版本开始,您需要显式调用 startListening()
& stopListening()
在适配器上指示它开始/停止从数据库中检索数据。
来自Upgrading to FirebaseUI 3.0指南:
Adapter Lifecycle - in previous versions the adapters began listening immediately upon instantiation and had a
cleanup()
call to stop listening. In 3.x you must explicitly callstartListening()
andstopListening()
or pass aLifecycleOwner
to the options builder.
关于android - 升级到 FirebaseUI 3.0 后无法使用 FirebaseRecyclerOptions 检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50703205/