我正在 Android Studio 项目中使用 Firebase ,我想知道如何获取整个firebase数据(如下图)。
我创建了4个课程
包含3个字符串和AllPlaces对象的城市类:
public class City {
private String name;
private String image;
private String hebrew;
private AllPlaces allPlaces;
public City(String name, String image, String hebrew, AllPlaces allPlaces) {
this.name = name;
this.image = image;
this.hebrew = hebrew;
this.allPlaces = allPlaces;
Log.d("niv","!!!");
}
public City() {}
public String getHebrew() {
return hebrew;
}
public void setHebrew(String hebrew) {
this.hebrew = hebrew;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getImage() {
return image;
}
public void setImage(String picUrl) {
this.image = picUrl;
}
public AllPlaces getAllPlaces() {
return allPlaces;
}
public void setAllPlaces(AllPlaces allPlaces) {
this.allPlaces = allPlaces;
}
AllPlaces类,其中包含Place类的HashMap:
public class AllPlaces {
private HashMap<String,PlaceCategory> placeHashMap=new HashMap<>();
public AllPlaces() {
}
public AllPlaces(HashMap<String, PlaceCategory> placeHashMap) {
this.placeHashMap = placeHashMap;
}
public HashMap<String, PlaceCategory> getPlaceHashMap() {
return placeHashMap;
}
public void setPlaceHashMap(HashMap<String, PlaceCategory> placeHashMap) {
this.placeHashMap = placeHashMap;
}
包含两个字符串和位置哈希图的位置类别类:
public class PlaceCategory {
private String name;
private String Hname;
private HashMap<String,Place> places=new HashMap<>();
public PlaceCategory(String name, String hname, HashMap<String, Place> places) {
this.name = name;
Hname = hname;
this.places = places;
}
public PlaceCategory() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getHname() {
return Hname;
}
public void setHname(String hname) {
Hname = hname;
}
public HashMap<String, Place> getPlaces() {
return places;
}
public void setPlaces(HashMap<String, Place> places) {
this.places = places;
}
包含两个字符串的Place类:
public class Place {
private String name;
private String Hname;
public Place() {
}
public Place(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Place(String name, String hname) {
this.name = name;
Hname = hname;
}
public String getHname() {
return Hname;
}
public void setHname(String hname) {
Hname = hname;
}
之后,我尝试使用以下方法获取数据:
List<City> cities=new ArrayList<>();
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference citiesRef= database.getReference("cities");
citiesRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()){
cities.clear();
for (DataSnapshot snapshot : dataSnapshot.getChildren()){
City city = snapshot.getValue(City.class);
cities.add(city);
}
}
}
错误:
FATAL EXCEPTION: main
Process: com.example.win10.triplanner, PID: 11822
com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.example.win10.triplanner.PlaceCategory
at com.google.android.gms.internal.zg.zzb(Unknown Source)
at com.google.android.gms.internal.zg.zza(Unknown Source)
at com.google.android.gms.internal.zg.zza(Unknown Source)
at com.google.android.gms.internal.zg.zzb(Unknown Source)
at com.google.android.gms.internal.zh.zze(Unknown Source)
at com.google.android.gms.internal.zg.zzb(Unknown Source)
at com.google.android.gms.internal.zg.zza(Unknown Source)
at com.google.android.gms.internal.zg.zzb(Unknown Source)
at com.google.android.gms.internal.zh.zze(Unknown Source)
at com.google.android.gms.internal.zg.zzb(Unknown Source)
at com.google.android.gms.internal.zg.zza(Unknown Source)
at com.google.firebase.database.DataSnapshot.getValue(Unknown Source)
at com.example.win10.triplanner.MainActivity$2.onDataChange(MainActivity.java:162)
at com.google.android.gms.internal.to.zza(Unknown Source)
at com.google.android.gms.internal.vj.zzHX(Unknown Source)
at com.google.android.gms.internal.vp.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5832)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
重要 在创建这些类之前,我只有一个仅包含字符串的city类,并且从firebase中获得了3个字符串,并且效果很好。