如何在Fire base android中获取特定的子节点?
我需要在recyler视图中从AGS Biryani获得畅销书的值,不知道如何基于父节点将子值添加到recyler适配器 型号如何在Fire base android中获取特定的子节点?,android,firebase,firebase-realtime-database,firebaseui,Android,Firebase,Firebase Realtime Database,Firebaseui,我需要在recyler视图中从AGS Biryani获得畅销书的值,不知道如何基于父节点将子值添加到recyler适配器 型号 public class Food_List { private String itemname; private String itemdescrp; private long itemnewprice; private long itemoldprice; public String getItemname() {
public class Food_List {
private String itemname;
private String itemdescrp;
private long itemnewprice;
private long itemoldprice;
public String getItemname() {
return itemname;
}
public void setItemname(String itemname) {
this.itemname = itemname;
}
public String getItemdescrp() {
return itemdescrp;
}
public void setItemdescrp(String itemdescrp) {
this.itemdescrp = itemdescrp;
}
public long getItemnewprice() {
return itemnewprice;
}
public void setItemnewprice(long itemnewprice) {
this.itemnewprice = itemnewprice;
}
public long getItemoldprice() {
return itemoldprice;
}
public void setItemoldprice(long itemoldprice) {
this.itemoldprice = itemoldprice;
}
}
食物清单\u持票人
ViewHolder可在Recyler视图中添加值
public class Food_List_ViewHolders extends RecyclerView.ViewHolder {
View mView;
private Context context;
Context mContext;
String nodata;
public Food_List_ViewHolders(View itemView) {
super(itemView);
mView=itemView;
}
@SuppressLint("SetTextI18n")
public void setDetails(Context applicationContext, final String itemname, String itemdescrp,
final long itemnewprice,
final long itemoldprice
)
{
final TextView dishitemname=mView.findViewById(R.id.dishheader);
TextView dishitemnamedescrp=mView.findViewById(R.id.dishheaderdescrp);
TextView dishitemnameoldprice=mView.findViewById(R.id.itemoldprice);
TextView dishitemnamenewprice=mView.findViewById(R.id.itemnewprice);
dishitemname.setText(itemname);
dishitemnamedescrp.setText(itemdescrp);
dishitemnamenewprice.setText(applicationContext.getString(R.string.Rup) + itemnewprice);
dishitemnameoldprice.setText(applicationContext.getString(R.string.Rup) + itemoldprice);
mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View mView) {
Context context = mView.getContext();
}
});
}
}
主要活动
不知道如何在DataSnapshot中添加子值
mRecycleriew =findViewById(R.id.my_recycler_views);
mRecycleriew.setLayoutManager(new LinearLayoutManager(this));
mFirebaseDatabase= FirebaseDatabase.getInstance();
mRef=mFirebaseDatabase.getReference().child("restaurants").equalTo("AGS Biryani");
//DatabaseReference restaurantsRef = mRef.child("restaurants");
mRef(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()){
progressDoalog.dismiss();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
private void mRef(ValueEventListener valueEventListener) {
}
protected void onStart() {
super.onStart();
FirebaseRecyclerAdapter<Food_List,Food_List_ViewHolders> firebaseRecyclerAdapter=
new FirebaseRecyclerAdapter<Food_List, Food_List_ViewHolders>(
Food_List.class,
R.layout.item_child,
Food_List_ViewHolders.class,
mRef)
{
@Override
protected void populateViewHolder(Food_List_ViewHolders viewHolder, Food_List model, int position) {
viewHolder.setDetails(getApplicationContext(),model.getItemname(),model.getItemdescrp(),model.getItemnewprice(),model.getItemoldprice());
}
};
mRecycleriew.setAdapter(firebaseRecyclerAdapter);
}
mRecycleriew=findviewbyd(R.id.my\u recycler\u视图);
mRecycleriew.setLayoutManager(新的LinearLayoutManager(本));
mFirebaseDatabase=FirebaseDatabase.getInstance();
mRef=mFirebaseDatabase.getReference().child(“餐厅”).equalTo(“AGS Biryani”);
//DatabaseReference restaurantsRef=mRef.child(“餐厅”);
mRef(新值eventlistener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
对于(DataSnapshot ds:DataSnapshot.getChildren()){
progressDoalog.disclose();
}
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
}
私有void mRef(ValueEventListener ValueEventListener){
}
受保护的void onStart(){
super.onStart();
FirebaseRecyclerAdapter FirebaseRecyclerAdapter=
新型FirebaseRecyclerAdapter(
食品类,
R.layout.item_子项,
食物列表视图持有者.class,
mRef)
{
@凌驾
受保护的空白填充视图支架(食物列表视图支架,食物列表模型,内部位置){
viewHolder.setDetails(getApplicationContext()、model.getItemname()、model.getItemdescrp()、model.getItemnewprice()、model.getItemoldprice());
}
};
mRecycleriew.setAdapter(firebaseRecyclerAdapter);
}
基本上你在做:
mRef=mFirebaseDatabase.getReference().child("restaurants").equalTo("AGS Biryani");
FirebaseRecyclerAdapter<Food_List,Food_List_ViewHolders> firebaseRecyclerAdapter=
new FirebaseRecyclerAdapter<Food_List, Food_List_ViewHolders>(
Food_List.class,
R.layout.item_child,
Food_List_ViewHolders.class,
mRef)
当您将此引用传递到
FirebaseRecyclerAdapter
时,它将显示AGS Biryani的所有畅销书。您无法添加到shapshot。您只能从snapshop获得。如果需要将值发送到fire base,可以使用.setValue()发送到节点。可以迭代快照以获取当前子项下的所有子项。使用for循环例如for(DataSnapshot messageSnapshot:DataSnapshot.getChildren()){String name=(String)messageSnapshot.child(“item”).getValue();String price=(String)messageSnapshot.child(“price”).getValue();}谢谢@JawadZeb你能分享代码吗???我会重写你的代码。告诉我你想做什么?要获取resturant节点下的所有值吗?@JawadZeb看起来Kali正在使用FirebaseUI的FirebaseRecyclerAdapter
,它已经处理了您提到的循环。他的populateViewHolder
有一个模型项Food\u List
,FirebaseUI会自动从DataSnapshot
反序列化该模型项。我(还)不确定它为什么不起作用,但它们不需要自己循环getChildren()
;跳过布局@这听起来像是另一个问题。您是否检查了?mRef=mFirebaseDatabase.getReference().child(“餐厅”)在此模式下,布局将显示,而在此模式下,child(“餐厅/AGS Biryani/畅销书”)布局屏幕为空。我认为问题在于盖特和塞特@Frank如何在logat中检查火基值(“餐厅/AGS Biryani/畅销书”)@Frank当您使用/restaurants
时,屏幕会显示什么?这似乎不太可能是正确的。Food\u List
类并没有为餐厅建模,而是为一种似乎在畅销书下的食品建模。这就是您应该指向的适配器。在我的代码片段中,这是/restaurants/AGS Biryani/畅销书
。
mRef=mFirebaseDatabase.getReference().child("restaurants/AGS Biryani/bestsellers");