Android 如何在Firebase数据库中接收特定值(读取或接收数据时出现问题)
我需要从数据库中接收这两个值 我需要把这些值放在一个标记中 我不知道如何将接收到的数据库纬度和经度放到标记上 这是我所使用的方法:Android 如何在Firebase数据库中接收特定值(读取或接收数据时出现问题),android,firebase,nullpointerexception,firebase-realtime-database,Android,Firebase,Nullpointerexception,Firebase Realtime Database,我需要从数据库中接收这两个值 我需要把这些值放在一个标记中 我不知道如何将接收到的数据库纬度和经度放到标记上 这是我所使用的方法: public static DatabaseReference getPostRef() { return FirebaseDatabase.getInstance() .getReference(Constantes.POSTS_KEY); } public static Query getPostQuery(
public static DatabaseReference getPostRef() {
return FirebaseDatabase.getInstance()
.getReference(Constantes.POSTS_KEY);
}
public static Query getPostQuery() {
return getPostRef().orderByChild(Constantes.TIME_CREATED_KEY);
}
public static DatabaseReference getMyPostRef() {
return FirebaseDatabase.getInstance().getReference(Constantes.MY_POSTS)
.child(getCurrentUser().getEmail().replace(".", ","));
}
// USER ID
public static String getUid() {
String path = FirebaseDatabase.getInstance().getReference().push().toString();
return path.substring(path.lastIndexOf("/") + 1);
}
我用它来发送数据
FirebaseUtils.getPostRef().child(postUid).setValue(mPost);
这是我的模型课:
public class Post implements Serializable {
private String photoPortadaUrl;
private String organizadoPor;
private String mes;
private String dia;
private String hora;
private String minutos;
private String titulo;
private String descripicion;
private String costo;
private double latitud;
private double longitud;
public Post(){
}
public Post(String photoPortadaUrl, String organizadoPor, String mes, String dia, String hora, String minutos, String titulo, String descripicion, String costo, double latitud, double longitud) {
this.photoPortadaUrl = photoPortadaUrl;
this.organizadoPor = organizadoPor;
this.mes = mes;
this.dia = dia;
this.hora = hora;
this.minutos = minutos;
this.titulo = titulo;
this.descripicion = descripicion;
this.costo = costo;
this.latitud = latitud;
this.longitud = longitud;
}
public String getPhotoPortadaUrl() {
return photoPortadaUrl;
}
public void setPhotoPortadaUrl(String photoPortadaUrl) {
this.photoPortadaUrl = photoPortadaUrl;
}
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
public String getOrganizadoPor() {
return organizadoPor;
}
public void setOrganizadoPor(String organizadoPor) {
this.organizadoPor = organizadoPor;
}
public String getMes() {
return mes;
}
public void setMes(String mes) {
this.mes = mes;
}
public String getDia() {
return dia;
}
public void setDia(String dia) {
this.dia = dia;
}
public String getHora() {
return hora;
}
public void setHora(String hora) {
this.hora = hora;
}
public String getMinutos() {
return minutos;
}
public void setMinutos(String minutos) {
this.minutos = minutos;
}
public String getDescripicion() {
return descripicion;
}
public void setDescripicion(String descripicion) {
this.descripicion = descripicion;
}
public String getCosto() {
return costo;
}
public void setCosto(String costo) {
this.costo = costo;
}
public double getLatitud() {
return latitud;
}
public void setLatitud(double latitud) {
this.latitud = latitud;
}
public double getLongitud() {
return longitud;
}
public void setLongitud(double longitud) {
this.longitud = longitud;
}
}
但要接收数据或读取数据,我会这样做:我会输入相关代码:
public class NavActivity extends AppCompatActivity {
private Post mPost;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_nav);
mPost = new Post();
}
public void onMapReady(GoogleMap googleMap) {
FirebaseUtils.getPostRef().child(postuid).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
mPost = dataSnapshot.getValue(Post.class);
// HERE IS THE ERROR
//When I try to read the data it gives me an exception which I will put down
/*
I try with this
but i get the same exception
Post LPOst = dataSnapshot.getValue(Post.class);
Log.d("Dep", LPOst.getTitulo());
*/
Log.d("Dep", mPost.getTitulo());
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
我得到一个例外:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.octacorp.octa.strank.models.Post.getTitulo()' on a null object reference
at com.octacorp.octa.strank.Activities.NavActivity$5.onDataChange(NavActivity.java:333)
我该怎么做呢?您需要一个值事件侦听器。如果您不希望每次更改时都提取数据,则可以使用单个事件侦听器。谢谢,但我如何实现它以接收纬度和经度数据?将数据库引用指向节点,您希望提取并添加一个值事件侦听器。如果节点的值不存在,则会得到null。firebase文档页面上有很多教程。我尝试了这个'FirebaseUtils.getPostRef().addListenerForSingleValueEvent(新值EventListener(){@Override public void onDataChange(DataSnapshot DataSnapshot){mPost=DataSnapshot.getValue(Post.class);latlgn6=new LatLng(mPost.getLatitud()),mPost.getLongitud();mkOption=new MarkerOptions().position(latlgn6).title(mPost.getitulo());}@Override public void onCancelled(DatabaseError DatabaseError){};mMap.addMarker(mkOption)`这与您之前关于同一主题的问题有何关联:。您从未接受或提供过答案,所以这仍然是同一个问题吗?我想我可以将纬度和经度数据放入标记,但我不知道如何接收该数据,我正在尝试使用singleValueEventListener()@FrankvanPuffelenHi@FrankvanPuffelen我尝试了这个,使用与文档类似的方法,但不起作用,我尝试Post-lPost=dataSpanshot.getValue(Post.class);但是我得到了一个NullPointerException,Firebase中的数据不是null,并且lPost对象是Instanced请在问题中添加读取数据(并引发异常)的代码。出于这个目的,在问题下方有一个方便的编辑链接。我还建议您阅读如何创建一个,因为:重现问题所需的代码越少,就越有可能有人会将原因归咎于此;谢谢你的帮助!