如何在Fire base android中获取特定的子节点?

如何在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() {

我需要在recyler视图中从AGS Biryani获得畅销书的值,不知道如何基于父节点将子值添加到recyler适配器

型号

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");