com.google.firebase.database.DatabaseException: невозможно преобразовать объект типа java.lang.String в тип com.harry.foodapp.Model.AdminOrders - PullRequest
0 голосов
/ 25 сентября 2019

Я делаю приложение для покупок и хочу добавить вкладку «Заказы», ​​где пользователи могут видеть свои собственные заказы, ожидающие в данный момент.Я уже сделал вкладку «Заказы», ​​где администратор может видеть все пользовательские заказы в панели администратора.Я также использовал тот же блок кодов для активности в списке заказов текущего пользователя.Но он показывает все заказы каждого пользователя.Я не знаю, как это исправить.У меня есть модель класса, чтобы получить Текущий пользователь онлайн.Я тоже это попробовал, но не получилось.

Вот что я попробовал ...

protected void onStart()
{
    super.onStart();

    final DatabaseReference ordersRef = FirebaseDatabase.getInstance().getReference().child("Orders");
    FirebaseRecyclerOptions<AdminOrders> options =
            new FirebaseRecyclerOptions.Builder<AdminOrders>()
                    .setQuery(ordersRef
                            .child(Prevelant.currentOnlineUser.getUsername())
                            , AdminOrders.class)
                    .build();

    FirebaseRecyclerAdapter<AdminOrders, AdminOrdersViewHolder> adapter =
            new FirebaseRecyclerAdapter<AdminOrders, AdminOrdersViewHolder>(options) {
                @Override
                protected void onBindViewHolder(@NonNull final AdminOrdersViewHolder holder, final int position, final @NonNull AdminOrders model)
                {
                    holder.userName.setText("Name : "+ model.getName());
                    holder.userPhoneNumber.setText("Phone Number : "+ model.getPhone());
                    holder.userTotalPrice.setText("Total : Rs."+ model.getTotalAmount());
                    holder.userDateTime.setText("Order Time : "+ model.getDate() + model.getTime());
                    holder.userShippingAddress.setText("Address : "+ model.getAddress() + "," + model.getCity());
                    holder.showOrdersBtn.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v)
                        {
                            String uID = getRef(position).getKey();
                            Intent intent = new Intent(UserViewOrdersActivity.this, AdminUserProductsActivity.class);
                            intent.putExtra("uid", uID);
                            startActivity(intent);
                        }
                    });

                    if(model.getFast_delivery()){
                        holder.txtFastDel.setText("Fast Delivery : Yes");
                    }else{
                        holder.txtFastDel.setText("Fast Delivery : No");
                    }
                }

AdminOrders

public class AdminOrders
{
    String name;
    String phone;
    String address;
    String state;
    String time;
    String totalAmount;
    String city;
    String date;
    String postal_code;
    Boolean fast_delivery;

    public AdminOrders()
    {
    }

    public AdminOrders(String name, String phone, String address, String state, String time, String totalAmount, String city, String date, String postal_code, Boolean fast_delivery) {
        this.name = name;
        this.phone = phone;
        this.address = address;
        this.state = state;
        this.time = time;
        this.totalAmount = totalAmount;
        this.city = city;
        this.date = date;
        this.postal_code = postal_code;
        this.fast_delivery = fast_delivery;
    }

AdminOrdersViewHolder

public static class AdminOrdersViewHolder extends RecyclerView.ViewHolder
    {
        public TextView userName, userPhoneNumber, userTotalPrice, userDateTime, userShippingAddress, txtFastDel;
        public Button showOrdersBtn, viewLocationBtn;
        public Switch fast_delivery;
        public AdminOrdersViewHolder (View itemView)
        {
            super(itemView);
            userName = itemView.findViewById(R.id.orderUserName);
            userPhoneNumber = itemView.findViewById(R.id.orderPhoneNumber);
            userTotalPrice = itemView.findViewById(R.id.orderTotalPrice);
            userDateTime = itemView.findViewById(R.id.orderAddressCity);
            userShippingAddress = itemView.findViewById(R.id.orderDateTime);
            showOrdersBtn = itemView.findViewById(R.id.showAllProductsBtn);
            viewLocationBtn = itemView.findViewById(R.id.viewLocationBtn);
            txtFastDel = itemView.findViewById(R.id.txtFastDel);
            fast_delivery = itemView.findViewById(R.id.fast_delivery);
        }
    }

database

И вот ошибка, которую я получаю

com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.harry.foodapp.Model.AdminOrders

1 Ответ

2 голосов
/ 25 сентября 2019

Измените это:

.setQuery(ordersRef
.child(Prevelant.currentOnlineUser.getUsername()), AdminOrders.class)

на это:

.setQuery(ordersRef, AdminOrders.class)

Когда вы добавляете child(Prevelant.currentOnlineUser.getUsername()), вы получаете атрибуты как String.Так что вам нужно сопоставить JSON с классом модели.Пример:

 {
  "name":"John",
  "age":30,
  "cars": {
    "car1":"Ford",
    "car2":"BMW",
    "car3":"Fiat"
  }
 }

Здесь cars - это объект, который содержит атрибуты car1, car2 и car3.В вашем случае admin является объектом, а внутри него есть атрибуты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...