получить данные указанного c значения в представлении корзины Firebase в android studio - PullRequest
0 голосов
/ 13 июля 2020

У меня есть приложение для электронной коммерции android, и у меня есть все заказы (состояние = отправлено и не отправлено введите описание изображения здесь ped), которые получает администратор в режиме ресайклера из базы данных Firebase в реальном времени. Теперь я хочу получать отгруженные заказы (состояние = отправлено) в другом действии, и я не знаю, как получить только те заказы, у которых состояние = отправлено. Я пробовал несколько вещей, но не могу обойти это. Так что любой может помочь, пожалуйста, ответьте. Мой код recyclerView выглядит так:

shippedOrdersRef = FirebaseDatabase.getInstance().getReference().child("Orders")    
FirebaseRecyclerOptions<AdminOrders> options = new FirebaseRecyclerOptions.Builder<AdminOrders>()
            .setQuery(shippedOrdersRef, AdminOrders.class).build();

    FirebaseRecyclerAdapter<AdminOrders, AdminNewOrdersActivity.AdminOrderViewHolder> adapter =
            new FirebaseRecyclerAdapter<AdminOrders, AdminNewOrdersActivity.AdminOrderViewHolder>(options) {
                @Override
                protected void onBindViewHolder(@NonNull AdminNewOrdersActivity.AdminOrderViewHolder holder, final int i, @NonNull AdminOrders adminOrders)
                {
                    holder.userName.setText("Name: " + adminOrders.getName());
                    holder.userPhoneNumber.setText("Phone: " + adminOrders.getPhone());
                    holder.userTotalPrice.setText("Total Amount =  Rs." + adminOrders.getTotalAmount());
                    holder.userDateTime.setText("Order at: " + adminOrders.getDate() + "  " + adminOrders.getTime());
                    holder.userShippingAddress.setText("Shipping Address: " + adminOrders.getAddress() + ", " + adminOrders.getCity());
                    holder.orderState.setText("" + adminOrders.getState());

     }

                @NonNull
                @Override
                public AdminNewOrdersActivity.AdminOrderViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
                {
                    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.orders_layout, parent, false);
                    return new AdminNewOrdersActivity.AdminOrderViewHolder(view);
                }
            };
    shippedOrdersList.setAdapter(adapter);
    adapter.startListening();
}

    [My database looks like this][1]

Ответы [ 2 ]

0 голосов
/ 13 июля 2020

Попробуй так. Предполагая, что AdminOrders.class - ваш класс модели.

{
    FirebaseRecyclerAdapter<AdminOrders, AdminNewOrdersActivity.AdminOrderViewHolder> adapter;

    FirebaseRecyclerOptions<AdminOrders> options =
                    new FirebaseRecyclerOptions.Builder<AdminOrders>()
            .setQuery(shippedOrdersRef.orderByChild("state").equalTo("shipped"), AdminOrders.class)
            .build();

    adapter = new FirebaseRecyclerAdapter<Products_Model, OrderProductsFragment.AdminOrderViewHolder>(options){
          @SuppressLint("SetTextI18n")
                @Override
                protected void onBindViewHolder(@NonNull final AdminNewOrdersActivity.AdminOrderViewHolder holder, final int position, @NonNull final AdminOrders model) {
        // Set your elements here


                View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_view, parent, false);
                return new AdminOrderViewHolder(view);
                }
    @NonNull
                @Override
                public AdminOrderViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
          //Set your view here
        }
     };
            recyclerView.setAdapter(adapter);
            adapter.startListening();
    }

Извините за выравнивания и скобки, если я ошибаюсь.

0 голосов
/ 13 июля 2020

Один из способов выглядит так (у вас есть оператор if, и вы сохраняете те, которые хотите в массиве):

List<String> shipped = new ArrayList<>();

shippedOrdersRef = FirebaseDatabase.getInstance().getReference().child("Orders");
shippedOrdersRef.addValueEventListener(new ValueEventListener()
   @Override
   public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
       for(DataSnapshot ds : dataSnapshot.getChildren()){
           Orders order = ds.getValue(Orders.class);
           if(order.getState().equals("shipped")) shipped.add(order.getState());
       }
    });

Где Orders - это имя класса с конструктором заказов.

Другой способ, более быстрый:

shippedOrdersRef = FirebaseDatabase.getInstance().getReference().child("Orders");
shippedOrdersRef.orderByChild("state").equalTo("shipped").addValueEventListener(new ValueEventListener()
   @Override
   public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
      DataSnapshot firstChild = dataSnapshot.getChildren().iterator().next();
      //your wanted value is firstChild.getKey()
   });

Здесь - полезная ссылка.

Надеюсь, я помогло!

...