有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java安卓如何从hashmap中获取整数值

HashMap<String,Integer>alert=( HashMap<String,Integer>) documentSnapshot.get("alert");
                        Log.e("alert",String.valueOf(alert));
                        Integer days=alert.get("days").intValue();
                        Integer hours=alert.get("hours").intValue();
                        Integer minutes=alert.get("minutes").intValue();

//这是我的日志

 java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
        at FirstFlowFragments.BookAppointmentFragment$2.onComplete(BookAppointmentFragment.java:234)
        at com.google.安卓.gms.tasks.zzj.run(Unknown Source:23)
        at 安卓.os.Handler.handleCallback(Handler.java:790)
        at 安卓.os.Handler.dispatchMessage(Handler.java:99)
        at 安卓.os.Looper.loop(Looper.java:171)

我正在从firebase数据库获取hashmap值,该值即将到来。当我尝试获取这些值时,hashmap中的值是整数,就像java一样。Long不能转换为整数


共 (3) 个答案

  1. # 1 楼答案

    您需要找出dataSnapshot.getValue()值的实际类型,并将其转换为正确的映射类型以避免此错误

  2. # 2 楼答案

    如果数据库只包含不浮点或双精度的整数值,那么可以直接从HashMap的键中获取Integer值。无需添加.intValue()

    Integer days=alert.get("days");
    Integer hours=alert.get("hours");
    Integer minutes=alert.get("minutes");
    

    如果数据库中的值为float,则可以使用以下代码

    if(alert.get("days")!=null) {
       int days = Math.round(alert.get("days"));
    }
    
  3. # 3 楼答案

    获取长的值,然后将其转换为整数

    Integer days= Math.toIntExact(alert.get("days").longValue());
    Integer hours= Math.toIntExact(alert.get("hours").longValue());
    Integer minutes= Math.toIntExact(alert.get("minutes").longValue());