我想从Firebase数据库中获取LatLng的列表。以前,我是通过mMarkerPoints.add(new LatLng(latitude, longitude));
这个代码和databaseReference.child("Area").child(pushId).child("region").setValue(mMarkerPoints);
这个数据库结构插入多边形列表的,
现在,我想从数据库中获取此mMarkerPoints。为此,我编写了代码List<LatLng> areaRegion = (ArrayList) dataSnapshot.child(key).child("region").getValue();
,该代码给了我例外。如何获得此清单?
代码:
databaseReference.child("Area").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
String key = dataSnapshot1.child(dataSnapshot1.getKey()).getKey();
String areaName = dataSnapshot.child(key).child("name").getValue(String.class);
List<LatLng> areaRegion = (ArrayList<LatLng>) dataSnapshot.child(key).child("region").getValue();
for(int i = 0; i<values.size();i++) {
Log.d("sdfljdjw", values.get(i));
}
一点解决方案:
我通过以下代码获得了此结果{longitude=71.43064320087433, latitude=32.392359285468686}
:
Object value = dataSnapshot.child(key).child("region").getValue();
if(value instanceof List) {
List<Object> sdfsd = (List<Object>) value;
for(int i = 0; i<sdfsd.size();i++) {
Log.d("sdfljdjw", sdfsd.get(i)+"");
}
}
else {
Log.d("sdfljdjw", "no");
}
现在如何将这些值转换为LatLng对象?
10-10 14:20:30.539 11935-11935 / com.example.salesman.salesmantrackingsystem E / AndroidRuntime:致命异常:main java.lang.ClassCastException:无法将java.util.HashMap转换为com.google.android.gms.maps.model.LatLng 在com.example.salesman.salesmantrackingsystem.LoginActivity $ 1 $ 1 $ 1 $ 1.onDataChange(LoginActivity.java:154) 在com.google.android.gms.internal.zzegf.zza(未知来源) com.google.android.gms.internal.zzeia.zzbyc(未知来源) com.google.android.gms.internal.zzeig.run(未知来源) 在android.os.Handler.handleCallback(Handler.java:615) 在android.os.Handler.dispatchMessage(Handler.java:92) 在android.os.Looper.loop(Looper.java:153) 在android.app.ActivityThread.main(ActivityThread.java:5086)
答案 0 :(得分:1)
尝试这样的事情
Map<String, Object> td = (HashMap<String,Object>) dataSnapshot.getValue();
List<Object> values = td.values();
答案 1 :(得分:1)
猜测(未试用),替换:
List<LatLng> areaRegion = (ArrayList<LatLng>) dataSnapshot.child(key).child("region").getValue();
类似:
List<LatLng> areaRegion = new ArrayList<>();
List<Object> locations = (List<Object>) dataSnapshot.child(key).child("region").getValue();
for (Object locationObj : locations) {
Map<String, Object> location = (Map<String, Object>) locationObj;
LatLng latLng = new LatLng((Double) location.get("latitude")), (Double) location.get("longitude"));
areaRegion.add(latLng);
}