我正在尝试从Firebase读取纬度和经度,并将标记放在这些位置上。但是似乎有一些错误使应用崩溃,即使在Logcat上我也找不到。尝试在每个语句后放置一些检查日志,发现问题出在我试图将值放在数据库快照的类对象中的地方。我正在尝试使用循环从快照中获取所有对象。这是我的数据库的结构。
我的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 code和location 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));
}
答案 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();