Firebase的AndroidChat示例:无法反弹到键入

时间:2014-02-11 09:55:11

标签: java android firebase

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

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

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

enter image description here

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

enter image description here

发生同样的错误:

enter image description here

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

4 个答案:

答案 0 :(得分:3)

看起来你只是改变了聊天消息,而不是全部。当代码尝试反序列化您尚未更改为author2的消息时,它无法找到作者字段并引发异常。

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

答案 1 :(得分:1)

为了更好地充实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与其他人正在使用的任何东西分开都是一个好习惯。

快乐的黑客攻击!

答案 2 :(得分:1)

添加上述答案。

我试图修改android聊天示例,我正确地做了所有名称都是正确的,并按照伪造。我仍然得到同样的错误。

解决方案: 创建Bean类时,请在结构中包含每个子项而不留任何条目。

在我的情况下,我试图根据android应用程序的要求创建一个bean,从而产生错误。

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

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

答案 3 :(得分:1)

  

你必须休会Java Bean Conviction

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