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无法转换为整数。
答案 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"));
}