java.lang.ClassCastException:无法将java.lang.Boolean强制转换为java.util.Map

时间:2018-12-05 13:42:32

标签: java android android-studio

我在这行中得到错误:“ Map map =(Map)dataSnapshot.getValue();”

     private void getAssignedCustomer(){
    String driverId = FirebaseAuth.getInstance().getCurrentUser().getUid();
    DatabaseReference assignedCustomerRef = FirebaseDatabase.getInstance().getReference().child("Users").child("Drivers").child(driverId);
    assignedCustomerRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if(dataSnapshot.exists()){

                Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue();

                if(map.get("customerRideId") != null){
                    customerId = map.get("customerRideId").toString();
                    getAssignedCustomerPickupLocation();
                }
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });
}

如何摆脱这个错误?

3 个答案:

答案 0 :(得分:1)

从Firebase文档中引用:

  

getValue()以本机类型返回此快照中包含的数据。返回的可能类型为:

     

布尔值

     

字符串

     

     

Double

     

地图

     

列表

     

此列表是递归的;上面列表中Object的可能类型由同一列表给出。这些类型与JSON中可用的类型相对应。

dataSnapshot.getValue()返回的值似乎是布尔值,并且肯定不能将其分配给Map<String, Object>

确保您使用的是来自dataSnapshot的正确数据

答案 1 :(得分:0)

请检查此代码

if (dataSnapshot.getValue() != null) {
  String avataStr = (String) dataSnapshot.getValue();
}

答案 2 :(得分:0)

首先在您的firabase数据库中检查您要在节点“用户/驱动程序”下尝试检索的关键driverId的值不是布尔值。