Oto moje proste podstawowe dane z Bazy Firebase.Jak deserializować zagnieżdżone bazy danych Firebase w Javie za pomocą klasy Mapa <String, Obect> lub listy <object>?
{
"elephant" : {
"color" : "gray",
"lifespan" : 48,
"status" : "endangered"
}
}
W moim projekcie android zrobiłem tej klasy do reprezentowania danych
public class elephant{
private String color;
private int lifespan;
private String status;
// Constructors
public elephant(){
}
public elephant(String color, int lifespan, String status) { . . . }
// Getters and Setters
public String getColor() { return color; }
public void setColor(String color) { this.color = color; }
public int getLifespan() { return lifespan; }
public void setLifespan(int lifespan) { this.lifespan = lifespan; }
public String getStatus() { return status; }
public void setStatus(String status) { this.status = status; }
}
ten sposób można wywołać metodę getValue (elephant.class), aby odzyskać te dane.
Elephant ele = datasnapshot.getValue(elephant.class);
Działa.
Teraz dodaję jeden zagnieżdżony węzeł do mojego projektu.
{
"elephant" : {
"color" : "gray",
"lifespan" : 48,
"status" : "endangered",
"dimension" : {
"height" : 270,
"length" : 607
}
}
}
Utworzyłem nową klasę o nazwie Dimension.java w moim projekcie:
public class Dimension {
private int length, height;
// Constructors
public Dimension() { }
public Dimension(int length, int height) { . . . }
// Public getters and setters
public int getLength() {return length;}
public void setLength(int length) {this.length = length;}
public int getHeight() {return height;}
public void setHeight(int height) {this.height = height;}
}
I zmodyfikowane mój elephant.java włączenie tej zmiennej/PRZEDMIOT:
private Dimension dimension;
i odpowiedniego konstruktora, pobierających i ustawiających dla niego.
i moja poprzednia metoda nadal działa. Zwraca poprawną reprezentację java dla całego pliku danych.
Elephant ele = datasnapshot.getValue(elephant.class);
, a jeśli dostanę datasnapshot w DatabaseRef.child ('wymiar') mogę przekazać dimension.class do getValue() aby uzyskać odpowiednie dane:
Dimension data = datasnapshot.getValue(dimension.class);
Owe uniwersalnego zajęcia są dla mnie bardzo wygodne.
Teraz wiem, że dane Firebase mają być znormalizowane/spłaszczone. Ale jeśli chodzi o eksperymenty, powiedzmy, że dodałem trochę danych za pomocą metody pushID.
{
"elephant" : {
"color" : "gray",
"status" : "endangered",
"lifespan" : 48,
"dimension" : {
"height" : 270,
"length" : 607
},
"population" : {
"-KTcpw_SsMb55qLc6Xme" : {
"count" : 210,
"location" : "Bangladesh"
},
"-KTcq6YeB3kX3h9F9xPU" : {
"count" : 428,
"location" : "Bhutan"
},
"-KTcqDySLBAFtCuUc3R4" : {...},
"-KTcqMyy4GULKo6FqPEM" : {...},
"-KTcqWwtli672ROpry8_" : {...},
"-KTcqhnBb6dTN1mA1otW" : {...}
}
}
}
Teraz, jeśli chcę zrobić poprzednią pracę kodu dla tego przypadku:
Elephant ele = datasnapshot.getValue(elephant.class);
Jak mogę napisać nową klasę dla węzła „populacji”.
W bazie danych Firebase jest powiedziane, że zwraca ona odpowiednik java w postaci Map<String, Object>
lub List<Object>
. Ale będąc początkującym w Javie utknąłem z tym problemem w ciągu ostatnich 4 dni.
Potrafię iterować po numerze dataSnapshot.child('population')
i dodawać je do listy osobnego obiektu "population
". Ale zastanawiałem się, czy można to osiągnąć w ten sposób. Proszę pomóż mi z kodem lub połącz mnie z przykładem, gdzie zrobiono to w jednym wierszu i automatycznie. To będzie taka ulga.
to działało. :) Byłem na tej drodze raz, ale gdzieś w kodzie spieprzyłem i to nie zadziałało. – BorhnN
Dziękuję bardzo :) – BorhnN