0

У меня есть этот класс МАРШРУТ:Как получить значение списка <Marker> в моем собственном классе, хранящемся в базе данных о Firebase

/** 
* 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) { 

     } 
    }); 

Но всегда мне нужно получить значение маркеров в моем списке resultsItinerarios,

Пример:

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 базы данных.

1

Пожалуйста, мне нужна ваша помощь.

С уважением.

Алехандро Б.

ответ

2

Все пользовательские объекты хранятся в Firebase, как Maps/HashMaps. Поэтому, если вам нужно получить доступ к объекту;

либо доступ к нему, как и любой другой карте

или разрешить firebase (джексон - последний раз я проверил), чтобы использовать отражение

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 
+0

Спасибо Вам, отличная проблема была решена в течение нескольких минут. Ты лучший !!!!! : D С уважением. –

+0

Добро пожаловать! –

+0

* firebaser здесь * В версиях 9.x Джексон больше не встроен, но есть специальный сериализатор/десериализатор. При необходимости вы все еще можете использовать * Jackson, вам просто нужно добавить зависимость самостоятельно. –