com.google.firebase.database.DatabaseException:无法将java.lang.String类型的对象转换为com.harry.foodapp.Model.AdminOrders类型

时间:2019-09-25 10:18:11

标签: java android firebase

我正在制作一个购物应用程序,我想添加一个“订单”标签,用户可以在其中查看自己的当前待处理订单。我已经在“管理面板”中创建了“订单”标签,管理员可以在其中查看所有用户订单。我也为当前用户的“订单”列表活动使用了相同的代码块。但是它显示每个用户的所有所有订单。我不知道该如何解决。我有一个模型课程来获取当前在线用户。我也尝试过,但是没有用。

这就是我尝试过的...

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

管理员订单

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 个答案:

答案 0 :(得分:2)

更改此:

.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是一个包含属性car1car2car3的对象。在您的情况下,admin是对象,而对象内部是属性。