Firebase Android 聊天示例:无法弹回输入

Posted

技术标签:

【中文标题】Firebase Android 聊天示例:无法弹回输入【英文标题】:Firebase's AndroidChat example: Failed to bounce to type 【发布时间】:2014-03-09 00:54:17 【问题描述】:

这个问题也在试图找出我几天前发布的这个question的答案。

androidChat 应用程序的奇怪之处在于我将 Chat 类属性名称更改为不同的名称。这会导致“无法弹回输入”异常。当我在我的 firebase 实例中更改名称(从 author 到 author2)时,也发生了同样的事情。下面是描述我想说的截图。最后还有一个LogCat:

在 Chat.java 中从 author 更改为 author2 时:

或者在 firebase 的实例中更改相同的内容时:

同样的错误发生:

LogCat 的日志:

02-11 11:52:11.735: D/dalvikvm(16033): GC_CONCURRENT freed 339K, 12% free 7825K/8839K, paused 17ms+5ms, total 69ms
02-11 11:52:12.835: D/dalvikvm(16033): GC_CONCURRENT freed 462K, 13% free 7869K/9031K, paused 5ms+3ms, total 40ms
02-11 11:52:12.940: D/dalvikvm(16033): GC_CONCURRENT freed 446K, 13% free 7889K/9031K, paused 11ms+1ms, total 34ms
02-11 11:52:13.140: D/AndroidRuntime(16033): Shutting down VM
02-11 11:52:13.140: W/dalvikvm(16033): threadid=1: thread exiting with uncaught exception (group=0x41c992a0)
02-11 11:52:13.150: E/AndroidRuntime(16033): FATAL EXCEPTION: main
02-11 11:52:13.150: E/AndroidRuntime(16033): com.firebase.client.FirebaseException: Failed to bounce to type
02-11 11:52:13.150: E/AndroidRuntime(16033):    at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:185)
02-11 11:52:13.150: E/AndroidRuntime(16033):    at com.firebase.androidchat.FirebaseListAdapter$1.onChildAdded(FirebaseListAdapter.java:63)
02-11 11:52:13.150: E/AndroidRuntime(16033):    at com.firebase.client.core.ChildListenerContainer$1.run(ChildListenerContainer.java:52)
02-11 11:52:13.150: E/AndroidRuntime(16033):    at android.os.Handler.handleCallback(Handler.java:615)
02-11 11:52:13.150: E/AndroidRuntime(16033):    at android.os.Handler.dispatchMessage(Handler.java:92)
02-11 11:52:13.150: E/AndroidRuntime(16033):    at android.os.Looper.loop(Looper.java:137)
02-11 11:52:13.150: E/AndroidRuntime(16033):    at android.app.ActivityThread.main(ActivityThread.java:4947)
02-11 11:52:13.150: E/AndroidRuntime(16033):    at java.lang.reflect.Method.invokeNative(Native Method)
02-11 11:52:13.150: E/AndroidRuntime(16033):    at java.lang.reflect.Method.invoke(Method.java:511)
02-11 11:52:13.150: E/AndroidRuntime(16033):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
02-11 11:52:13.150: E/AndroidRuntime(16033):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
02-11 11:52:13.150: E/AndroidRuntime(16033):    at dalvik.system.NativeStart.main(Native Method)
02-11 11:52:13.150: E/AndroidRuntime(16033): Caused by: com.shaded.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "author" (class com.firebase.androidchat.Chat), not marked as ignorable (one known property: "message"])
02-11 11:52:13.150: E/AndroidRuntime(16033):  at [Source: java.io.StringReader@424dcef8; line: 1, column: 45] (through reference chain: com.firebase.androidchat.Chat["author"])
02-11 11:52:13.150: E/AndroidRuntime(16033):    at com.shaded.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty(DeserializationContext.java:555)
02-11 11:52:13.150: E/AndroidRuntime(16033):    at com.shaded.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:708)
02-11 11:52:13.150: E/AndroidRuntime(16033):    at com.shaded.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1160)
02-11 11:52:13.150: E/AndroidRuntime(16033):    at com.shaded.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:315)
02-11 11:52:13.150: E/AndroidRuntime(16033):    at com.shaded.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:121)
02-11 11:52:13.150: E/AndroidRuntime(16033):    at com.shaded.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2888)
02-11 11:52:13.150: E/AndroidRuntime(16033):    at com.shaded.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2034)
02-11 11:52:13.150: E/AndroidRuntime(16033):    at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:181)
02-11 11:52:13.150: E/AndroidRuntime(16033):    ... 11 more

【问题讨论】:

【参考方案1】:

您似乎只更改了聊天消息,而不是全部更改。当代码尝试反序列化一条您尚未更改为 author2 的消息时,它找不到 author 字段并引发异常。

尝试将所有消息更改为 author2,或者清除您的数据并使用新字段名称重新开始。

【讨论】:

是的,你可能是对的。我确实尝试将它们全部更改为 author2 但仍然发生相同的错误。以下是我所做的更改:pastebin.com/R1ginNqx 尝试将 getAuthor() 也更改为 getAuthor2()。 我也尝试更改activity_main.xml,因为我的应用不需要发回任何东西。我只是删除了 editText 和 sendButton (或其中之一),应用程序再次崩溃。这种情况我该怎么办? 确保您还从主活动中删除了对 editText 和 sendButton 的引用。应用程序可能仍在尝试使用这些元素为各种操作设置处理程序,但由于您已将其删除,因此无法再找到它们。【参考方案2】:

为了进一步充实 Greg 的答案,聊天示例依赖于在 Firebase 以及 Android 客户端的数据中正确命名的所有内容。通常,Firebase 如下所示:

android-chat
|---> chat
   |---> pushID
      |---> author
      |---> message

如果您修改 Chat.java 文件中的属性名称或通过 Forge 更改任何字段的名称:https://android-chat.firebaseio-demo.com/ 它有可能导致此错误,因为无法正确创建对象,因为JSON 到对象映射链接被切断(有关此映射,请参见 FirebaseListAdaptor.java 第 63 行)。如果 Firebase 中存储的单个项目不正确,或者聊天对象命名不正确,则会触发此错误。

附带说明,当用户想要尝试使用应用的数据结构时,请创建一个单独的测试 Firebase 并在此基础上进行开发。我不确定这发生在哪个 Firebase 上,但启动一个与其他人当前使用的任何东西分开的 Firebase 始终是一个好习惯。

黑客愉快!

【讨论】:

【参考方案3】:

补充上面的答案。

我正在尝试修改 android 聊天示例,并且我做得正确,所有名称都是正确的,并且符合伪造的要求。我仍然遇到同样的错误。

解决方案: 创建 Bean 类时,将所有子类包含在结构中,不要留下任何条目。

在我的情况下,我试图根据 android 应用程序的要求创建一个 bean,因此出现了错误。

示例:我刚刚为作者和消息声明了两个 getter 方法(这是错误的。)

android-chat
|---> chat
    |---> pushID
        |---> author
        |---> message
        |---> time
        |---> fourthChild

【讨论】:

我收到此错误是因为我没有所有子键的吸气剂。 +1 指出这一点。【参考方案4】:

你必须休息Java Bean Conviction

因为我弄乱了default constructor,我一直在努力解决这个错误

【讨论】:

以上是关于Firebase Android 聊天示例:无法弹回输入的主要内容,如果未能解决你的问题,请参考以下文章

Android蓝牙聊天示例无效,无法连接设备

android微信的聊天记录长按某聊天弹出的页面是怎样实现的

实施 Codelab Firebase 聊天示例

无法从 Android 将数据发布到 Firebase 数据库

Android config firebase realtime database rule for normal user access

使用 Firebase 的 Android 聊天应用程序,但未在 firebase 中存储数据