Android如何从hashmap中获取Integer值


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();

//这是我的logcat

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数据库中获取hashmap值,该值即将到来。当我尝试获取这些值时,hashmap中的值是integer,就像java一样。Long不能强制转换为整数。

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

获取与long一样长的值,然后将其强制转换为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());

如果您的数据库只包含非浮点或双精度的整数值,那么您可以直接从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"));
}

最新更新