Как получить определенные дочерние узлы в базе Android Fire?

Как получить определенные дочерние узлы в базе Android Fire?

Мне нужно получить значения бестселлера от AGS Biryani в представлении ресайлера, не знаю, как добавить дочерние значения в адаптер ресайлера на основе родительского узла

Модель

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;
    }

}

Food_List_ViewHolders

ViewHolders для добавления значения в представлении 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);

    }

Вы не можете добавить в снэпчат. вы можете получить только в снапшопе. если вам нужно отправить значения на базу огня, вы можете использовать .set Value () для узла.

Jawad Zeb 11.07.2018 09:08

вы можете выполнить итерацию снимка, чтобы получить всех дочерних элементов текущего дочернего элемента. используя цикл, например. for (DataSnapshot messageSnapshot: dataSnapshot.getChildren ()) {String name = (String) messageSnapshot.child ("элемент"). getValue (); String price = (String) messageSnapshot.child («цена»). GetValue (); }

Jawad Zeb 11.07.2018 09:12

Спасибо @JawadZeb Можете ли вы поделиться кодом ???

Kali Raj 11.07.2018 09:14

Я перепишу твой код. скажи мне, что ты хочешь сделать? вы хотите получить все значения в узле ресторана?

Jawad Zeb 11.07.2018 09:16

@JawadZeb Похоже, Kali использует FirebaseUI FirebaseRecyclerAdapter, который уже обрабатывает упомянутый вами цикл. Его populateViewHolder имеет элемент модели Food_List, который FirebaseUI автоматически десериализует с DataSnapshot. Я (пока) не уверен, почему он не работает, но им не нужно перебирать getChildren() самостоятельно.

Frank van Puffelen 11.07.2018 09:20

Большое спасибо @Jawad, не все ценности ... мне нужно показать ценности "бестселлеров" от "AGS Biryani"

Kali Raj 11.07.2018 09:21

Спасибо за ответ @FrankvanPuffelen. Есть идея показать ценности "бестселлеров" в recylerview?

Kali Raj 11.07.2018 09:25
1
7
53
1

Ответы 1

По сути, вы делаете:

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)

Это означает, что вы показываете все рестораны с приоритетом AGS Biryani. Это не то, что вы пытаетесь сделать, поэтому вам нужно изменить свой ref:

mRef=mFirebaseDatabase.getReference().child("restaurants/AGS Biryani/bestsellers");

Когда вы передадите этот код в FirebaseRecyclerAdapter, он покажет все бестселлеры AGS Biryani.

ОШИБКА: E / RecyclerView: адаптер не подключен; пропуская макет @Frank

Kali Raj 11.07.2018 09:31

Это похоже на другую проблему. Вы проверяли предыдущие вопросы с этим сообщением об ошибке?

Frank van Puffelen 11.07.2018 09:36

mRef = mFirebaseDatabase.getReference (). child («рестораны») в этом режиме будет отображаться макет, а в этом режиме экран макета дочернего («рестораны / AGS Biryani / бестселлеры») пуст. я думаю проблема в геттере и сеттере? @Откровенный

Kali Raj 11.07.2018 09:50

как проверить базовые значения Fire («рестораны / AGS Biryani / бестселлеры») в логате? @Откровенный

Kali Raj 11.07.2018 11:08

Что показывает ваш экран, когда вы используете /restaurants? Кажется маловероятным, что это правильно. Класс Food_List не моделирует ресторан, он моделирует еду, которая, похоже, находится под bestsellers. Вот на что вы должны указать свой адаптер. В моем фрагменте это /restaurants/AGS Biryani/bestsellers.

Frank van Puffelen 12.07.2018 15:13

Другие вопросы по теме