【问题标题】:Firebase android hashmap integer value turned into LongFirebase android hashmap整数值变成Long
【发布时间】:2020-05-02 14:32:27
【问题描述】:
 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)

我不知道这是怎么发生的,因为我将整数数组列表存储到哈希图中。下面是数据库的图片。

【问题讨论】:

  • Firebase 不想假设您的数据的最大值,因此它可能会在会话方面出错(使用长整数而不是整数)。你能用 ArrayList 代替吗?

标签: android firebase firebase-realtime-database


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    与其直接将 long 转换为 int,不如使用 String.valueOf() 将 long 转换为 string em> 然后我们可以使用 Integer.parseInt() 轻松地将 string 值转换为 int

    所以你可以用这个,

    **

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

    **

    【讨论】:

      猜你喜欢
      • 2017-11-03
      • 1970-01-01
      • 2023-03-15
      • 2019-04-30
      • 1970-01-01
      • 2016-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多