Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在Firebase数据库中接收特定值(读取或接收数据时出现问题)_Android_Firebase_Nullpointerexception_Firebase Realtime Database - Fatal编程技术网

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请在问题中添加读取数据(并引发异常)的代码。出于这个目的,在问题下方有一个方便的编辑链接。我还建议您阅读如何创建一个,因为:重现问题所需的代码越少,就越有可能有人会将原因归咎于此;谢谢你的帮助!