İşte basit birincil Firebase verilerim. Benim android projedeYuvalanmış Firebase veritabanını Java'da Map <String, Obect> veya List <object> sınıfı ile nasıl deserialize edebilirsiniz?
{
"elephant" : {
"color" : "gray",
"lifespan" : 48,
"status" : "endangered"
}
}
ben bu verileri
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; }
}
bu verileri almak için getValue (elephant.class) yöntemini çağırabilirsiniz Bu şekilde temsil etmek bu sınıfı yaptı.
Elephant ele = datasnapshot.getValue(elephant.class);
Çalışıyor.
Şimdi projeme bir iç içe düğüm ekliyorum.
{
"elephant" : {
"color" : "gray",
"lifespan" : 48,
"status" : "endangered",
"dimension" : {
"height" : 270,
"length" : 607
}
}
}
Projemde Dimension.java denilen yeni bir sınıf oluşturduk:
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;}
}
Ve bu değişken/nesne dahil etmek benim elephant.java modifiye:
ve bunun için uygun yapıcı, alıcılar ve ayarlayıcılar.
ve önceki yöntemlerim hala çalışıyor. Tüm veri anlık görüntüsü için uygun java gösterimini döndürür.
Elephant ele = datasnapshot.getValue(elephant.class);
ve ben DatabaseRef.child ('boyutu') bir datasnapshot olsun düzgün veri almak için getValue() yöntemine dimension.class geçebilir:
Dimension data = datasnapshot.getValue(dimension.class);
Bu nedenle, bu çok amaçlı sınıflar bana oldukça uygun.
Şimdi, Firebase verilerinin normalleştirilmesi/düzleştirilmesi gerektiğini biliyoruz. Ancak deneyler uğruna pushID ile bazı veriler eklediğimi söyleyelim. Şimdi
{
"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" : {...}
}
}
}
, bu durum için önceki kod işi yapmak istiyorsanız: Ben 'nüfus' düğüm için yeni bir sınıf yazmak nasıl
Elephant ele = datasnapshot.getValue(elephant.class);
.
Firebase başvurusunda, Map<String, Object>
veya List<Object>
java eşdeğerini döndürdüğü söylenir. Ama Java'da yeni başlayan biri olmaktan 4 gün sonra bu problemle karşılaştım.
dataSnapshot.child('population')
aracılığıyla yineleyebilir ve ayrı bir 'population
' nesnesinin listesine ekleyebilirsiniz. Ama bu şekilde elde edilip edilemeyeceğini merak ettim. Lütfen kodla bana yardımcı olun veya bana bir satırda ve otomatik olarak yapıldığı bir örneğe bağlantı verin. Böyle bir rahatlama olacak.
İşe yaradı. :) Bu yoldan birkez daha düştüm, ama bir yerlerde kodlarım berbat ettim ve işe yaramadı. – BorhnN
Çok teşekkür ederim :) – BorhnN