java.util.HashMap не может быть приведен к com.google.android.gms.maps.model.LatLng - PullRequest
0 голосов
/ 10 октября 2018

Я хочу получить список LatLng из базы данных Firebase.Ранее я вставлял список полигонов по этому коду, 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();, этот код дает мне исключение.Как получить этот список?

код:

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)

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

В предположении (не проверено), замените:

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);
}
0 голосов
/ 10 октября 2018

Попробуйте что-то вроде этого

  Map<String, Object> td = (HashMap<String,Object>) dataSnapshot.getValue();

    List<Object> values = td.values();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...