我正在制作一个购物应用程序,我想添加一个“订单”标签,用户可以在其中查看自己的当前待处理订单。我已经在“管理面板”中创建了“订单”标签,管理员可以在其中查看所有用户订单。我也为当前用户的“订单”列表活动使用了相同的代码块。但是它显示每个用户的所有所有订单。我不知道该如何解决。我有一个模型课程来获取当前在线用户。我也尝试过,但是没有用。
这就是我尝试过的...
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);
}
}
这是我遇到的错误
com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.harry.foodapp.Model.AdminOrders
答案 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
是一个包含属性car1
,car2
和car3
的对象。在您的情况下,admin
是对象,而对象内部是属性。