无法从Firebase数据库快照读取对象

时间:2018-11-02 23:05:58

标签: android firebase firebase-realtime-database

我正在尝试从Firebase读取纬度和经度,并将标记放在这些位置上。但是似乎有一些错误使应用崩溃,即使在Logcat上我也找不到。尝试在每个语句后放置一些检查日志,发现问题出在我试图将值放在数据库快照的类对象中的地方。我正在尝试使用循环从快照中获取所有对象。这是我的数据库的结构。 enter image description here

我的Maps活动代码,我试图将数据库快照中的值放到类对象中。

//reading stations from database
List<Stations> stations;
 mDatabase = FirebaseDatabase.getInstance().getReference().child("STATIONS");

    ValueEventListener stationListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            //found out that error is here
            for(DataSnapshot stationsSnapshot: dataSnapshot.getChildren()){
                stations.add(stationsSnapshot.getValue(Station.class));
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.i("Station Read[ERROR]",databaseError.getMessage());
        }
    };
    mDatabase.addListenerForSingleValueEvent(stationListener);

我的station class codelocation class code

代码,用于标记从firebase获取的地图上的位置。

    //Placing all station data on Maps
    for(int i=0 ; i<stations.size() ; i++){
        LatLng location = new LatLng(stations.get(i).getLocation().getLatitude(),
                stations.get(i).getLocation().getLongitude());
        mMap.addMarker(new MarkerOptions().position(location).title(stations.get(i).getName()));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(location));
    }

2 个答案:

答案 0 :(得分:3)

初始化电台列表。

List<Stations> stations= new ArrayList<>();

添加标记的逻辑对我来说似乎不错。正如Momen所言,只需将其添加到正确的位置即可。

答案 1 :(得分:0)

1-对象Stations必须类似于firebase中的对象。这样

public class Stations{

public Location location;
public String name

//..getter and setter

public static class Location{
public double latitude;
public double  longitude;

//..getter and setter

}
}

这些字段必须是公开的

2-初始化arraylist

List<Stations> stations=new Arraylist();