Пример Firebase для AndroidChat: не удалось отскочить, чтобы набрать

1

Этот вопрос также пытается найти ответ для этого question, который я опубликовал несколько дней назад.

Странная вещь в приложении AndroidChat - это когда я изменил имя свойства класса Chat на другое имя. Это приводит к исключению "Неверный отказ". То же самое произошло, когда я сменил имя (от автора на author2) в моем экземпляре firebase. Ниже приведены скриншоты, описывающие то, что я пытаюсь сказать. Также в конце есть LogCat:

При смене автора на author2 в Chat.java:

Изображение 174551

ИЛИ при изменении того же объекта в экземпляре firebase:

Изображение 174551

Произошла одна и та же ошибка:

Изображение 174551

Журнал 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
Теги:
firebase

4 ответа

3
Лучший ответ

Похоже, вы изменили только сообщение в чате, но не все. Когда код пытается десериализовать сообщение, которое вы не изменили на author2, оно не может найти поле автора и выдает исключение.

Попробуйте либо изменить все сообщения на author2, либо очистить свои данные и начать с новых имен полей.

  • 0
    да, вы можете быть правы. Я попытался изменить их все на author2, но те же ошибки все еще происходят. Вот что я изменил: pastebin.com/R1ginNqx
  • 3
    Попробуйте изменить getAuthor () на getAuthor2 ().
Показать ещё 2 комментария
1

вы должны подпадать Java Bean Conviction

Я боролся с этой ошибкой только потому, что я испортил default constructor

1

Добавление к ответам выше.

Я пытался изменить пример андроидного чата, и я делал это правильно, все имена были правильными и соответствовали кузнице. Тем не менее, я получал ту же ошибку.

Решение: При создании класса Bean включайте каждый дочерний элемент в структуре, не оставляя никаких записей.

В моем случае я пытался создать Bean в соответствии с требованием приложения Android и, следовательно, к ошибке.

Пример: у меня только два метода getter, объявленных для автора и сообщения (что неправильно).

android-chat
|---> chat
    |---> pushID
        |---> author
        |---> message
        |---> time
        |---> fourthChild
  • 0
    Я получал эту ошибку, потому что у меня не было получателя для всех дочерних ключей. +1 за указание на это.
1

Чтобы отвлечь Грега больше, пример чата зависит от того, что правильно названо по данным в 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, которая отделена от всего, что в настоящее время используется другими.

Счастливый взлом!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню