Firebase的android hashmap整数值变成了Long

时间:2018-03-04 02:53:46

标签: android firebase firebase-realtime-database

 changeweek = (Map<String,ArrayList<Integer>>)dataSnapshot.child("week").getValue();
                    ArrayList<Integer> test = changeweek.get("Monday");
                    Log.d("changeweek",changeweek.toString());
                    int j = test.get(2);

我在最后一行收到错误,如下所示:

  

java.lang.ClassCastException:java.lang.Long无法强制转换为java.lang.Integer                                                                                 在com.example.fake9.tendee.ScheduleActivity $ 1 $ 1.onDataChange(ScheduleActivity.java:107)

我不知道这是怎么发生的,因为我将整数的Arraylist存储到hashmap中。以下是数据库的图片。

enter image description here

2 个答案:

答案 0 :(得分:1)

Firebase SDK在内部将所有类似整数的数值存储为Long值,无论您是否需要。这有助于防止可能非常大的数字作为值。

您使用Integer类型的值转换为Map会覆盖该值,然后在类型不匹配时在运行时导致问题。您可以通过简单地将值类型从Integer更改为Long来纠正此问题。

答案 1 :(得分:0)

不是直接将 long转换为int ,而是使用 String.valueOf()将long转换为 string em> ,那么我们可以轻松地将 string 的值转换为 int ,方法是使用 Integer.parseInt() < / p>

所以你可以这样做

**

int j = Integer.parseInt(String.valueOf(test.get(2)));

**