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() .