Как получить идентификатор пользователя для выполнения списка отображения в Android Studio для администратора, чтобы просмотреть список заказов? - PullRequest
0 голосов
/ 08 ноября 2019

Я хочу отобразить список заказов клиентов на моей странице администратора. Но это дает мне пустую страницу без ошибок внутри logcat.

Ниже моя база данных:

The highlighted id is the customer id and the blue line is the pro_id which is the order id of the customer. I want to view this list on my admin Order Received page

Я хочу отобразитьЗаказ внутри списка заказов. Выделенный идентификатор - это идентификатор клиента. Я назвал базу данных так:

databaseReference FirebaseDatabase.getInstance().getReference("Order");

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

Как мы видим, верно, что внутри базы данных заказов есть 3 идентификатора. но приложения не получили идентификатор. Как я могу вызвать идентификатор пользователя, чтобы отобразить его на странице списка заказов? enter image description here

Я ожидаю, что в результате будет отображен идентификатор клиента, который сделал заказ. На рисунке выше я ожидаю, что идентификатор клиента будет отображать идентификатор YQg0kFIUkXW0Z909XcI0XDIdeGt2, 06E02IpRO3RzWp2RQHfr7XVYsuo2 и wmzfhWTdA0U9Jh8ENnGJG6IPiNE2 вместо abc. Причина, по которой он отображает abc, заключается в том, что я установил текстовое представление как abc для подсказки.

Этот же идентификатор дублировался.

enter image description here


     databaseReference = FirebaseDatabase.getInstance().getReference("Order");
        databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                orderList = new ArrayList<>();

                for (DataSnapshot userSnapshot : dataSnapshot.getChildren()) {
            for (DataSnapshot orderSnapshot : userSnapshot.getChildren()) {
                orderList.add(orderSnapshot.getValue(Order.class));
            }
        }

                psOrderAdapter PsOrderAdapter = new psOrderAdapter(orderList);
                recyclerView.setAdapter(PsOrderAdapter);
//                Log.d("TAG", "Number of orders: " + orderList.size());


            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Toast.makeText(ManageOrder.this, databaseError.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });


        recyclerView = findViewById(R.id.rv);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

    }

Order class

public class Order {
    public String cust_id;
    public String pro_id;
    public String total;
    public String name;
    public String address;
    public String phone;
    public String status;


    public Order() {
    }

    public Order(String cust_id, String pro_id, String total, String name, String address, String phone, String status) {
        this.cust_id = cust_id;
        this.total = total;
        this.name = name;
        this.address = address;
        this.phone = phone;
        this.pro_id = pro_id;
        this.status = status;
    }

    public String getCust_id() {
        return cust_id;
    }

    public void setCust_id(String cust_id) {
        this.cust_id = cust_id;
    }

    public String getPro_id() {
        return pro_id;
    }

    public void setPro_id(String pro_id) {
        this.pro_id = pro_id;
    }

    public String getTotal() {
        return total;
    }

    public void setTotal(String total) {
        this.total = total;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }
}

1 Ответ

0 голосов
/ 08 ноября 2019

Ваша структура данных выглядит следующим образом:

Orders: {
  uid1: {
    orderid1: { ... },
    orderid3: { ... }
  },
  uid2: {
    orderid2: { ... },
    orderid4: { ... }
  }
}

Таким образом, у вас есть два динамических уровня в Orders: один для UID и один для идентификаторов заказа. Поскольку вы прослушиваете данные по всем Orders, ваш onDataChange должен будет содержать отдельный цикл для каждого из этих динамических уровней.

Прямо сейчас у вас есть один цикл, что означает, что вашds относится к данным для пользователя, в то время как вы пытаетесь прочитать из него заказ. Пожалуйста, используйте более подходящие имена переменных в будущем, так как это поможет вам гораздо проще находить подобные проблемы.

Правильный подход - сначала выполнить цикл по пользователям, а затем внутри цикла по заказам для этого пользователя. ,

Что-то вроде:

databaseReference = FirebaseDatabase.getInstance().getReference("Order");
databaseReference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        orderList = new ArrayList<>();

        for (DataSnapshot userSnapshot : dataSnapshot.getChildren()) {
            for (DataSnapshot orderSnapshot : userSnapshot.getChildren()) {
                orderList.add(orderSnapshot.getValue(Order.class));
            }
        }

        psOrderAdapter PsOrderAdapter = new psOrderAdapter(orderList);
        recyclerView.setAdapter(PsOrderAdapter);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...