Android如何从哈希图获取整数值

时间:2018-11-27 06:26:50

标签: java android

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.android.gms.tasks.zzj.run(Unknown Source:23)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:171)

我正在从Firebase数据库中获取哈希值,值即将到来。当我尝试获取这些值时,哈希图内的值是整数,例如java.Long无法转换为整数。

3 个答案:

答案 0 :(得分:0)

您需要找出dataSnapshot.getValue()的实际值类型,然后将其转换为正确的Map类型,以免发生此错误。

答案 1 :(得分:0)

获取尽可能长的值,然后将其强制转换为Integer

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

答案 2 :(得分:0)

如果您的数据库仅包含不为float或double的整数值,则可以直接从Integer的键中获取HashMap值。无需添加.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"));
}