У меня проблема с администратором Firebase с Java. Я использую базу данных Firebase Realtime, и мне нужно прочитать данные в конкретном дочернем элементе моей базы данных. Проблема в том, что я использую ValueEventListener
для чтения данных, но getValue()
в onDataChange
никогда не заканчивается или никогда не выполняется. Я пытаюсь преобразовать DataSnapshot в определенный объект в моей модели (который имеет непримитивные объекты в качестве атрибутов). Я пытаюсь сделать это:
System.out.println(dataSnapshot.getValue(MyObject.class).toString());
но ничего не печатается! Я также пытался сделать этот вызов (а затем использовать, например, gson):
System.out.println(dataSnapshot.getValue(JSONObject.class).toString());
но ничего не печатается снова. Этот код находится в onDataChange моего ValueEventListener. Я также попытался напечатать все дочерние атрибуты элемента, и у меня нет проблем, но если я попытаюсь вызвать getValue (MyObject.class), ничего не произойдет. Я на Heroku с Spring.
В чем моя ошибка?
[EDIT]: это атрибут в базе данных, который я хочу получить:
"ricette" : {
"-L2yUEiCOkxn4zLISjOm" : {
"a" : true,
"approvata" : 1516098247226,
"autore" : {
"displayname" : "Matteo",
"id" : "CaOUusrQLFQDW0rvnC0xkiEBSv42"
},
"carboidrati" : 42.584,
"chiave" : "-L2yUEiE-Zos_y1GcRrv",
"id" : "-L2yUEiCOkxn4zLISjOm",
"image" : "url_to_image",
"ingredienti" : [ {
"alimento" : {
"carboidrati" : 1.4,
"cod" : "1316_2",
"id" : "9506094d-9986-46a2-b825-c5ad174b936e",
"kcal" : 57,
"lipidi" : 1,
"nome" : "POLPO",
"proteine" : 10.6,
"ratio" : 0.08
},
"quantita" : 1000
}, {
"alimento" : {
"carboidrati" : 11.4,
"cod" : "100180_1",
"id" : "0b520eee-fada-44c6-9544-0072bd8634bc",
"kcal" : 55,
"lipidi" : 0.4,
"nome" : "POMODORO, CONCENTRATO (sostanza secca 18%)",
"proteine" : 0.9,
"ratio" : 0.03
},
"quantita" : 250
}, {
"alimento" : {
"carboidrati" : 8.4,
"cod" : "301_1",
"id" : "44f1b140-b40d-436c-80c7-0ba336c64045",
"kcal" : 45,
"lipidi" : 0.6,
"nome" : "AGLIO, fresco",
"proteine" : 0.9,
"ratio" : 0.06
},
"quantita" : 1
}, {
"alimento" : {
"carboidrati" : 0,
"cod" : "338_1",
"id" : "7077bfc1-bc63-48ea-8647-c596da34416f",
"kcal" : 30,
"lipidi" : 0.6,
"nome" : "PREZZEMOLO, fresco",
"proteine" : 3.7,
"ratio" : 0.16
},
"quantita" : 10
} ],
"inviata" : 1516098091939,
"kcal" : 710.95,
"lipidi" : 11.066,
"nome" : "Polpo in umido",
"note" : "Nota sul polpo in umido",
"portata" : "Secondo",
"proteine" : 108.629,
"ratio" : 0.07
}
Это классы Java в моей модели:
public class Ricetta implements Serializable {
private User.Autore autore;
private String id;
private String nome;
private String portata;
private String note;
private ArrayList<Alimento.Ingrediente> ingredienti;
private double lipidi;
private double proteine;
private double carboidrati;
private double kcal;
private double ratio;
}
public class Alimento implements Serializable {
public Alimento() {
}
private String id;
private String cod;
private String nome;
private boolean aggiuntodautente;
private double lipidi;
private double proteine;
private double carboidrati;
private double kcal;
private double ratio;
}
public class Ingrediente implements Serializable {
public Ingrediente() {
}
private Alimento alimento;
private int quantita;
}
public class Autore implements Serializable {
public Autore() {
}
public Autore(String displayname, String id) {
this.setDisplayname(displayname);
this.setId(id);
}
private String displayname;
private String id;
}
Это объект, в частности:
public class RicettaG extends Ricetta implements Serializable {
private String chiave;
private String image;
private long inviata;
private boolean a;
private long approvata;
}
(со всеми геттерами и сеттерами) Проблема с вызовом dataSnapshot.getValue(RicettaG.class)
в ссылке database.getReference("ricette/-L2yUEiCOkxn4zLISjOm")
. Может быть проблема в том, что в базе нет атрибута aggiuntodautente
? Спасибо.
getValue
не блокируется; он не может зависнуть (если не считать ошибки). Здесь недостаточно кода, чтобы увидеть, что вызывает вашу проблему. Прочтите как создать минимальный полный проверяемый пример. Быстрое предположение состоит в том, что это будет включать в себя то, как вы подключаете прослушиватель, к чему вы присоединяетесь (как спросил Алекс) и как вы обрабатываете данные от прослушивателя в остальной части вашего кода. - person Frank van Puffelen   schedule 09.02.2018