我有这个班级行程:
/**
* 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数据库的所有值,然后逐个放入List
//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) {
}
});
但我总是需要在List 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数据库的图片。
我需要你的帮助。
亲切的问候。
亚历杭德罗B。
答案 0 :(得分:2)
所有自定义对象都作为Maps / HashMaps存储在Firebase中。因此,如果您需要访问该对象;
像任何其他地图一样访问它
或允许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