如何将 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
我有这个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