java - com.google.firebase.database.DatabaseException : Can't convert object of type java. lang.String 输入 com.example.myapplication.Orders

标签 java android firebase firebase-realtime-database android-recyclerview

我已经检查了其他问题。他们都不能解决我的问题。我想从 Firebase 实时数据库的节点 “orderDetails” 检索数据并在 RecyclerView 中显示它们

UserActivity.java

private DatabaseReference databaseReference;
    RecyclerView ordersList;
    FirebaseAuth firebaseAuth;
    FirebaseUser firebaseUser;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user);

        firebaseAuth = FirebaseAuth.getInstance();
        firebaseUser = firebaseAuth.getCurrentUser();

        String pickerUID = FirebaseAuth.getInstance().getCurrentUser().getUid();
        try {
            DatabaseReference mDatabaseReference = FirebaseDatabase.getInstance().getReference();
            databaseReference = mDatabaseReference.child("Pickers").child(pickerUID).child("orderDetails");
            databaseReference.keepSynced(true);

            ordersList = findViewById(R.id.recycler);
            ordersList.setHasFixedSize(false);
            ordersList.setLayoutManager(new LinearLayoutManager(this));
        } catch (Exception e) {
            Toast.makeText(this, e.toString(), Toast.LENGTH_LONG).show();
        }
    }
@Override
    protected void onStart() {
        super.onStart();
        FirebaseRecyclerAdapter<Orders,OrdersViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Orders, OrdersViewHolder>
                (Orders.class, R.layout.orders_list, OrdersViewHolder.class, databaseReference) {
            @Override
            protected void populateViewHolder(OrdersViewHolder ordersViewHolder, Orders orders, int i) {

                try {
                    ordersViewHolder.setUserName(orders.getUserName());
                    ordersViewHolder.setUserAddress(orders.getUserAddress());
                    ordersViewHolder.setUserEmail(orders.getUserEmail());
                    ordersViewHolder.setDate(orders.getDate());
                    ordersViewHolder.setTime(orders.getTime());
                    ordersViewHolder.setUserUID(orders.getUserUID());
                    ordersViewHolder.setUserPhoneNumber(orders.getPhoneNumber());
                } catch (Exception e) {
                    Toast.makeText(UserActivity.this, e.toString(), Toast.LENGTH_LONG).show();
                }
            }
        };
        ordersList.setAdapter(firebaseRecyclerAdapter);
    }

    public static class OrdersViewHolder extends RecyclerView.ViewHolder {

        View view;
        public TextView userUIDTV;

        public OrdersViewHolder(View itemView) {
            super(itemView);
            view=itemView;
        }

        public void setUserName(String userName) {
            TextView name = view.findViewById(R.id.userName);
            name.setText(userName);
        }
        public void setUserAddress(String userAddress) {
            TextView address = view.findViewById(R.id.userAddress);
            address.setText(userAddress);
        }
        public void setUserEmail(String userEmail) {
            TextView email = view.findViewById(R.id.userEmail);
            email.setText(userEmail);
        }
        public void setDate(String date) {
            TextView userDate = view.findViewById(R.id.date);
            userDate.setText(date);
        }
        public void setTime(String time) {
            TextView userTime = view.findViewById(R.id.time);
            userTime.setText(time);
        }
        public void setUserUID(String userUID) {
            userUIDTV = view.findViewById(R.id.userUID);
            userUIDTV.setText(userUID);

        }
        public void setUserPhoneNumber(String userPhoneNumber) {
            TextView phoneNumber = view.findViewById(R.id.userPhoneNumber);
            phoneNumber.setText(userPhoneNumber);
        }

    }
}

Orders.java

public class Orders {

  private String userName;
  private String userAddress;
  private String userEmail;
  private String date;
  private String time;
  private String userUID;
  private String phoneNumber;

    public Orders(String userName, String userAddress, String userEmail, String date, String time, String phoneNumber, String userUID) {
        this.userName = userName;
        this.userAddress = userAddress;
        this.userEmail = userEmail;
        this.date = date;
        this.time = time;
        this.phoneNumber = phoneNumber;
        this.userUID = userUID;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserAddress() {
        return userAddress;
    }

    public void setUserAddress(String userAddress) {
        this.userAddress = userAddress;
    }

    public String getUserEmail() {
        return userEmail;
    }

    public void setUserEmail(String userEmail) {
        this.userEmail = userEmail;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setUserPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    public String getUserUID() {
        return userUID;
    }

    public void setUserUID(String userUID) {
        this.userUID = userUID;
    }

    public Orders() {

    }
}

我的数据库 https://ibb.co/DCHfBDt

我想从节点“orderDetails”获取数据

我该怎么做?

最佳答案

更改数据库结构并在 orderDetails 下添加随机 ID:

orderDetails
    randomId
        date : date_value
        phoneNumber : phoneNo_value

现在,当你这样做时:

databaseReference = mDatabaseReference.child("Pickers").child(pickerUID).child("orderDetails");

它将检索Orders类型的数据

关于java - com.google.firebase.database.DatabaseException : Can't convert object of type java. lang.String 输入 com.example.myapplication.Orders,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61898677/

相关文章:

java - net.sf.josql 是什么?在哪里?

java - 如何在JAVA中获取帧数(mp4)?

java - JDBC 准备好的语句不起作用

Android 将用户的选择保存为收藏夹

java - Android Firebase 推送通知在后台未收到?

java - 如何在 Eclipse Milo 中添加警报

android - 是否可以对 Android 应用程序中的耳机音量增大/减小键使用react?

java - 如何停止媒体播放器中的可运行程序?

node.js - 如何解决云函数中的 firestore 批处理限制

ios - 如何分别删除有关 Firebase/Analytics 和 swizzing 的 Firebase 警告和控制台消息?