Этот вопрос также пытается найти ответ для этого question, который я опубликовал несколько дней назад.
Странная вещь в приложении AndroidChat - это когда я изменил имя свойства класса Chat на другое имя. Это приводит к исключению "Неверный отказ". То же самое произошло, когда я сменил имя (от автора на author2) в моем экземпляре firebase. Ниже приведены скриншоты, описывающие то, что я пытаюсь сказать. Также в конце есть LogCat:
При смене автора на author2 в Chat.java:
ИЛИ при изменении того же объекта в экземпляре 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
Похоже, вы изменили только сообщение в чате, но не все. Когда код пытается десериализовать сообщение, которое вы не изменили на author2, оно не может найти поле автора и выдает исключение.
Попробуйте либо изменить все сообщения на author2, либо очистить свои данные и начать с новых имен полей.
вы должны подпадать Java Bean Conviction
Я боролся с этой ошибкой только потому, что я испортил default constructor
Добавление к ответам выше.
Я пытался изменить пример андроидного чата, и я делал это правильно, все имена были правильными и соответствовали кузнице. Тем не менее, я получал ту же ошибку.
Решение: При создании класса Bean включайте каждый дочерний элемент в структуре, не оставляя никаких записей.
В моем случае я пытался создать Bean в соответствии с требованием приложения Android и, следовательно, к ошибке.
Пример: у меня только два метода getter, объявленных для автора и сообщения (что неправильно).
android-chat
|---> chat
|---> pushID
|---> author
|---> message
|---> time
|---> fourthChild
Чтобы отвлечь Грега больше, пример чата зависит от того, что правильно названо по данным в 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, которая отделена от всего, что в настоящее время используется другими.
Счастливый взлом!