【问题标题】:com.google.firebase.database.DatabaseException: Expected a List while deserializing, but got a class java.util.HashMapcom.google.firebase.database.DatabaseException:反序列化时需要一个列表,但得到一个类 java.util.HashMap
【发布时间】:2016-07-25 22:41:47
【问题描述】:

我有一个下面的方法,它应该返回 Event 对象的 ArrayList。我正在使用将存储在 firebase 中的数据映射到 POJO 的方法。从调试来看,映射是正确的,我将对象添加到 ArrayList jsonString,代码在退出 for 循环时崩溃。

它给出错误:
com.google.firebase.database.DatabaseException: Expected a List while deserializing, but got a class java.util.HashMap

我没有添加很多代码,因为这个方法是独立的。

public ArrayList<Event> getJsonString(){
  final ArrayList<Event> jsonString = new ArrayList();

  mFirebaseDatabaseReference = database.getInstance().getReference(MESSAGES_CHILD);
  //mFirebaseDatabaseReference.child(MESSAGES_CHILD);
  mFirebaseDatabaseReference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
      for(DataSnapshot eventSnapshot:dataSnapshot.getChildren()){
        Event event = eventSnapshot.getValue(Event.class);
        jsonString.add(event);
      }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
  });

   return jsonString;
}

堆栈跟踪:

07-25 21:21:23.178 3037-3079/com.firstintel.zimnights E/DynamiteModule: Failed to load module descriptor class: Didn't find class "com.google.android.gms.dynamite.descriptors.com.google.firebase.auth.ModuleDescriptor" on path: DexPathList[[zip file "/data/app/com.firstintel.zimnights-1/base.apk"],nativeLibraryDirectories=[/data/app/com.firstintel.zimnights-1/lib/x86_64, /vendor/lib64, /system/lib64]]
07-25 21:21:23.191 3037-3079/com.firstintel.zimnights E/DynamiteModule: Failed to load module descriptor class: Didn't find class "com.google.android.gms.dynamite.descriptors.com.google.firebase.auth.ModuleDescriptor" on path: DexPathList[[zip file "/data/app/com.firstintel.zimnights-1/base.apk"],nativeLibraryDirectories=[/data/app/com.firstintel.zimnights-1/lib/x86_64, /vendor/lib64, /system/lib64]]
07-25 21:21:27.313 3037-3095/com.firstintel.zimnights E/Surface: getSlotFromBufferLocked: unknown buffer: 0x7f758c234b90
07-25 21:21:27.415 3037-3095/com.firstintel.zimnights E/Surface: getSlotFromBufferLocked: unknown buffer: 0x7f758c235530
07-25 21:21:28.228 3037-3037/com.firstintel.zimnights E/AndroidRuntime: FATAL EXCEPTION: main
                                                                        Process: com.firstintel.zimnights, PID: 3037
                                                                        com.google.firebase.database.DatabaseException: Expected a List while deserializing, but got a class java.util.HashMap
                                                                            at com.google.android.gms.internal.zzaix.zza(Unknown Source)
                                                                            at com.google.android.gms.internal.zzaix.zza(Unknown Source)
                                                                            at com.google.android.gms.internal.zzaix.zza(Unknown Source)
                                                                            at com.google.firebase.database.DataSnapshot.getValue(Unknown Source)
                                                                            at com.firstintel.zimnights.EventFragment$1.onDataChange(EventFragment.java:146)
                                                                            at com.google.android.gms.internal.zzafp.zza(Unknown Source)
                                                                            at com.google.android.gms.internal.zzagp.zzSu(Unknown Source)
                                                                            at com.google.android.gms.internal.zzags$1.run(Unknown Source)
                                                                            at android.os.Handler.handleCallback(Handler.java:739)
                                                                            at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                            at android.os.Looper.loop(Looper.java:148)
                                                                            at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                            at java.lang.reflect.Method.invoke(Native Method)
                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

【问题讨论】:

  • 您必须显示完整的异常堆栈跟踪并标识代码中导致引发异常的行。 edit您的帖子并包含必要的信息。此外,这段代码并没有真正做任何事情。您设置了一个侦听器,但没有调用任何其他方法,因此您将返回一个空列表。
  • 感谢我添加了堆栈跟踪
  • 您还应该发布您的 POJO Event 的代码。

标签: java android firebase firebase-realtime-database


【解决方案1】:

即使在类中使用 ArrayList,也可以通过检查变量名称及其顺序来修复许多情况,但堆叠类似情况的区别是一个有数组,一个已经推送了键值列表。

【讨论】:

    【解决方案2】:

    设法做一个解决方法,而不是返回 ArrayList,我只是在我的 getJsonString() 中调用了适配器,然后我在 OnCreate()。瞧,完美的作品会弄清楚是哪种设计模式,有人知道吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-20
      • 2020-04-04
      • 1970-01-01
      • 2022-01-02
      • 2021-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多