Не удается создать экземпляр значения типа с помощью Firebase

{  
"patients": {
"-Kx5vuRqItEF-7kAgVWy": {
    "name": "name1",
    "age": "27",
    "graphData": {
        "-K5knK9j8EfUHS7AesFw": {
            "date": "16/12/2015",
            "graphList": "[...]"
        }
    }
},
"-Kx5vuRqItEF-7kAgVWy": {
    "name": "name1",
    "age": "27",
    "graphData": {
        "-K5knK9j8EfUHS7AesFw": {
            "date": "16/12/2015",
            "graphList": "[...]"
        },
        "--K5knNeBFoLrjWnZshfL": {
            "date": "12/12/2015",
            "graphList": "[...]"
        },

    }
  }
 }
}

PatientView является объектом Java и содержит другой вложенный объект Graph.

public class PatientView {
private String name;
private String age;
private boolean gender;
private float height;
private String phone;
private Object bdate;

private String image;

private ArrayList<Graph> graphData;

public PatientView() {
}
}

Объект Graph: который имеет дату и объект ArrayList

public class Graph implements Serializable {
private Object graphDate;
private ArrayList<Double> graphList;

// Empty constructor needed for firebase
public Graph() {

}

public Graph(Object graphDate, ArrayList<Double> graphList) {
    this.graphDate = graphDate;
    this.graphList = graphList;
}
}

и чтение значений с помощью firebase addChildEventListen

public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            if (dataSnapshot != null && dataSnapshot.getValue() != null) {

                PatientView p = dataSnapshot.getValue(PatientView.class);

                patients.add(p);
                patientIdsFromServer.add(dataSnapshot.getKey());
                recyclerView.scrollToPosition(patients.size() - 1);
                mAdapter.notifyItemInserted(patients.size() - 1);
            }
        }

но получаю ошибку вроде

Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token at [Source: java.io.StringReader@2ced7c6a; line: 1, column: 62] (through reference chain: com.iitb.openmrs.openmrsfinal.ui.Adapter.PatientView["graphData"])

Проблема заключается в том, что когда я отправляю данные в дочерний элемент graphData, его идентификаторы генерируются, поэтому схема не соответствует объекту Graph. Я искал, есть ли способ подавить идентификатор при чтении данных, но ничего не нашел.


person Vikram    schedule 17.12.2015    source источник
comment
Вместо публикации ссылки на изображение данных JSON включите текст этих данных JSON в свой вопрос. Это гарантирует, что нам не нужно держать две вкладки открытыми для сравнения данных и кода. Кроме того, это позволяет нам более легко копировать/вставлять JSON в нашу собственную базу данных для тестирования (или в ответ).   -  person Frank van Puffelen    schedule 17.12.2015


Ответы (1)


Проблема здесь в том, что данные в graphData не являются массивом. Firebase не имеет встроенной поддержки массивов. Если вы храните массив, он действительно сохраняется как «объект» с целыми числами в качестве имен ключей, и, поскольку ваш ключ не является целым числом, вы не можете использовать его как массив.

Вы должны проверить этот ответ SO.

person Prashant Solanki    schedule 17.12.2015