从fireBase获取值

时间:2018-12-12 17:43:12

标签: android firebase firebase-realtime-database

我正在 Android Studio 项目中使用 Firebase ,我想知道如何获取整个firebase数据(如下图)。

my database

我创建了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个字符串,并且效果很好。

0 个答案:

没有答案