如何将 List<Marker> 的值获取到我自己的 class 存储在 Firebase 数据库中

How to get values of List<Marker> into of my own class stored in Database of Firebase

我有这个class行程:

/**
* Created by alejandro on 18-10-16.
*/

public class Itinerario {

private String nombre;
private String descripcion;
private List<Marker> puntos;
private String fecha;

public Itinerario(String usuario, List<Marker> puntos, String descripcion, String fecha) {

    this.nombre = usuario;
    this.puntos = puntos;
    this.descripcion = descripcion;
    this.fecha = fecha;
}

public String getUsuario() {
    return nombre;
}

public void setUsuario(String usuario) {
    this.nombre = usuario;
}

public String getDescripcion() {
    return descripcion;
}

public void setDescripcion(String descripcion) {
    this.descripcion = descripcion;
}

public List<Marker> getPuntos() {
    return puntos;
}

public void setPuntos(List<Marker> puntos) {
    this.puntos = puntos;
}

public String getFecha() {
    return fecha;
}

public void setFecha(String fecha) {
    this.fecha = fecha;
}
}

我用这种方法将对象保存在数据库中:

Itinerario prueba = new Itinerario("Prueba",
                        markers,
                        "desc",
                        String.valueOf(fecha.getTime()));
                myRef.child("myitineraries").child(String.valueOf(fecha.getTime())).setValue(prueba);

我用这个获取 Firebase 数据库的所有值,然后将它们一一放入列表中

//Declare
public ArrayList<Itinerario> resultsItinerarios = new ArrayList<>();


myRefItinerary.child("myitineraries").addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            Itinerario obj = null;

            try {

                List<Marker> map = (List<Marker>) dataSnapshot.child("puntos").getValue();

                obj = new Itinerario(
                        dataSnapshot.child("usuario").getValue().toString(),
                        map,
                        dataSnapshot.child("descripcion").getValue().toString(),
                        dataSnapshot.child("fecha").getValue().toString());

            } catch (Exception e) {

            }

            if (obj != null) {
                //List<Marker>
                resultsItinerarios.add(obj);

            }
        }


        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {
            Itinerario obj = null;

            try {

                List<Marker> map = (List<Marker>) dataSnapshot.child("puntos").getValue();

                obj = new Itinerario(
                        dataSnapshot.child("usuario").getValue().toString(),
                        map,
                        dataSnapshot.child("descripcion").getValue().toString(),
                        dataSnapshot.child("fecha").getValue().toString());

            } catch (Exception e) {

            }

            if (obj != null) {
                resultsItinerarios.remove(obj);

            }
        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

但我总是需要在我的列表结果Itinerarios 中检索标记的值,

示例:

Toast.makeText(MainActivity.this, "A: " 
+ getResultsItinerarios().get(0).getPuntos().get(0).getPosition().latitude, Toast.LENGTH_SHORT).show();

我得到这个错误:

java.lang.ClassCastException: java.util.HashMap cannot be cast to com.google.android.gms.maps.model.Marker

但是如果我使用这个:

Toast.makeText(MainActivity.this, "A: " 
+ getResultsItinerarios().get(0).getPuntos().get(0), Toast.LENGTH_SHORT).show();

(没有 getPosition().latitude 或 getPosition().longitude)我得到所有值,甚至显示纬度和经度。

这是输出:

10-19 03:10:52.203 29076-29076/cl.datacomputer.alejandrob.gogps I/ExampleGOGps: 

{draggable=false, alpha=1, infoWindowShown=false, id=m0, rotation=208877154, visible=true, zindex=0, position={latitude=-33.5174604, longitude=-70.7830533}, flat=false}

我找不到获取数据的方法,我附上了一张 Firebase 数据库的图片。

我需要你的帮助。

亲切的问候。

亚历杭德罗 B.

所有自定义对象都以 Maps/HashMaps 的形式存储在 Firebase 中。所以如果需要访问对象;

像访问任何其他地图一样访问它

或允许 firebase(jackson - 我上次检查时)使用反射

Iterator<DataSnapshot> iterator = dataSnapshot.child("puntos").getChildren().iterator();
List<Marker> markers = new ArrayList<>();

while (iterator.hasNext()) {
      DataSnapshot next = iterator.next();
      String key = next.getKey();
      Marker marker = next.getValue(Marker.class);

      markers.add(marker);
}
//Do this for the others and create you Itenerario Object