android - java.util.HashMap 无法转换为 com.google.android.gms.maps.model.LatLng

标签 android firebase firebase-realtime-database

我想从 Firebase 数据库中获取 LatLng 列表。以前,我通过此代码插入多边形列表,mMarkerPoints.add(new LatLng(latitude, longitude));通过这个databaseReference.child("Area").child(pushId).child("region").setValue(mMarkerPoints);数据库结构为,

enter image description here

现在,我想从数据库中获取这个 mMarkerPoints。为此,我编写了代码,List<LatLng> areaRegion = (ArrayList) dataSnapshot.child(key).child("region").getValue(); ,这段代码给我异常(exception)。如何获得这份名单?

代码:

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: FATAL EXCEPTION: main java.lang.ClassCastException: java.util.HashMap cannot be cast to com.google.android.gms.maps.model.LatLng at com.example.salesman.salesmantrackingsystem.LoginActivity$1$1$1$1.onDataChange(LoginActivity.java:154) at com.google.android.gms.internal.zzegf.zza(Unknown Source) at com.google.android.gms.internal.zzeia.zzbyc(Unknown Source) at com.google.android.gms.internal.zzeig.run(Unknown Source) at android.os.Handler.handleCallback(Handler.java:615) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:153) at android.app.ActivityThread.main(ActivityThread.java:5086)

最佳答案

根据猜测(未经测试),替换:

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);
}

关于android - java.util.HashMap 无法转换为 com.google.android.gms.maps.model.LatLng,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52737082/

相关文章:

ios - 显示用户周围的多个驱动程序注释(使用数据库)

java - 使用 Android 在 Android MZ320 中使用 cpcl 将图像和文本打印到收据

android - 使用Google Compile-Testing测试注释处理器的apt参数

尝试从云功能中删除 firestore 集合时未找到 firebase_tools

java - 可以将 List<Class> 上传到 firebase 实时数据库

android - 即使在 FirebaseListAdapter 中没有要填充的 View ,如何关闭进度条?

android - torch 应用程序问题

java - 这个在单独线程上绘图的具体示例有什么问题?

Firebase 电话身份验证只是超时,不发送短信或自动登录

javascript - 如何在 for 循环中使用 I-Value