Intereting Posts
Как начать программный проект программно с помощью Android Intent? Как получить путь к файлу в папке с ресурсами в android Сильное отключение устройства BLE, подключенного к Android-приложению, запускается onConnectionStateChange со статусом 8 Выделите пользовательский элемент списка при длительном нажатии Запретить предупреждение AndroidManifest.xml minSdkVersion Как создать файл .apk из командной строки Windows? Android Studio: средство рендеринга программного обеспечения Mesa устарело. Использовать Swiftshader для рендеринга программного обеспечения Android: AutoCompleteTextView скрывает мягкую клавиатуру Как узнать, какие аппаратные требования у моего приложения для Android? Остановить AppBarLayout прокрутку экрана, когда NestedScrollView пуст Android Multidex RuntimeException Выполнение плагинов не распространяется на ошибку конфигурации жизненного цикла Отложенные события на Android Как проверить ведение Android In-app Billing на сервере с Ruby? Включая предварительно созданную статическую библиотеку в системе Android build

Com.firebase.client.FirebaseException: не удалось разобрать узел с классом класса CLASS_NAME android

Я получаю следующее исключение, обновляя существующее значение в Firebase, используя метод updateChildren .

 com.firebase.client.FirebaseException: Failed to parse node with class class com.shajeelafzal.quicktasks_app.models.HashTagModel at com.firebase.client.snapshot.NodeUtilities.NodeFromJSON(NodeUtilities.java:84) at com.firebase.client.snapshot.NodeUtilities.NodeFromJSON(NodeUtilities.java:12) at com.firebase.client.utilities.Validation.parseAndValidateUpdate(Validation.java:127) at com.firebase.client.Firebase.updateChildren(Firebase.java:438) at com.shajeelafzal.quicktasks_app.fragments.AddEditTaskFragment$4.onDataChange(AddEditTaskFragment.java:408) 

Моя модель выглядит так:

 public class HashTagModel implements Parcelable { private HashMap<String, Object> timeStampLastUsed; @Expose private String name; @Expose private String createByUserEmail; private List<String> tasksKeys; public HashTagModel() { } public HashTagModel(HashMap<String, Object> timeStampLastUsed, String name, String createByUserEmail, ArrayList<String> tasksKeys) { this.timeStampLastUsed = timeStampLastUsed; this.name = name; this.createByUserEmail = createByUserEmail; this.tasksKeys = tasksKeys; } } 

Объект JSON, который я хочу обновить, выглядит так: Firebase:

 "hashTags" : { "USER_EMAIL" : { "USA" : { "createByUserEmail" : "USER_EMAIL", "name" : "#USA", "tasksKeys" : [ "-K6mS36uhKthKf1-1pF1" ], "timeStampLastUsed" : { "timestamp" : 1451514461234 } } } } 

И мой метод onDateChange выглядит следующим образом:

 public void onDataChange(DataSnapshot dataSnapshot) { /** if the hash tag does not exists already then create new one. */ if (dataSnapshot.getValue() == null) { HashMap<String, Object> timestampJoined = new HashMap<>(); timestampJoined.put(Constants.FIREBASE_PROPERTY_TIMESTAMP, ServerValue.TIMESTAMP); ArrayList<String> keysList = new ArrayList<String>(); keysList.add(key); HashTagModel hashTag = new HashTagModel(timestampJoined, "#" + mHashTags.get(finalI), Utils.decodeEmail(mEncodedEmail), keysList); finalHashTagLocation.setValue(hashTag); } else { HashTagModel hashtaghModel = dataSnapshot.getValue(HashTagModel.class); hashtaghModel.getTasksKeys().add(key); /* HashMap for data to update */ HashMap<String, Object> updateUserTaskData = new HashMap<>(); Utils.updateMapForAllWithValue(null, mHashTags.get(finalI), mEncodedEmail, updateUserTaskData, "", hashtaghModel, Constants.FIREBASE_LOCATION_USER_HASH_TAGS); /** update the Hash Tag */ finalHashTagLocation.updateChildren(updateUserTaskData, new Firebase.CompletionListener() { @Override public void onComplete(FirebaseError firebaseError, Firebase firebase) { Log.i("", ""); } }); } getActivity().finish(); } 

Solutions Collecting From Web of "Com.firebase.client.FirebaseException: не удалось разобрать узел с классом класса CLASS_NAME android"

В отличие от setValue() , updateChildren() не выполняет преобразование Java-to-JSON для значений, которые вы передаете.

Вы передаете HashMap<String, Object> в updateChildren() , который соответствует контракту этого API. Но я уверен, что в некоторых из значений у вас есть объект Java (вероятно, HashTagModel ), который напрямую не сопоставляется с типом JSON.

Но вы можете преобразовать POJO в карту с помощью:

 Map<String, Object> hashtaghMap = new ObjectMapper().convertValue(hashtaghModel, Map.class); 

Затем вы можете поместить карту значений в значения, которые вы передаете в updateChildren() .