【问题标题】:retrieve data from firebase using getUid() in a alertDialog box在 alertDialog 框中使用 getUid() 从 firebase 检索数据
【发布时间】:2018-11-24 15:12:03
【问题描述】:

想要从 firebase 数据库中检索用户名及其联系电话。我试过这样做,但在 logcat 中它会抛出一个空指针

Logcat:- 进程:com.example.bhavya.epark,PID:27351 java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.String com.example.bhavya.epark.userreg.getName()” 在 com.example.bhavya.epark.MapSelect$1$1.onDataChange(MapSelect.java:51) 在 com.google.firebase.database.obfuscated.zzap.zza(com.google.firebase:firebase-database@@16.0.3:75) 在 com.google.firebase.database.obfuscated.zzca.zza(com.google.firebase:firebase-database@@16.0.3:63) 在 com.google.firebase.database.obfuscated.zzcd$1.run(com.google.firebase:firebase-database@@16.0.3:55) 在 android.os.Handler.handleCallback(Handler.java:873) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:193) 在 android.app.ActivityThread.main(ActivityThread.java:6669) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

MapSelect.java

          mAuth = FirebaseAuth.getInstance();
                udetail = FirebaseDatabase.getInstance();
                DatabaseReference databaseReference = udetail.getReference(mAuth.getUid());
                databaseReference.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        userreg userprofile = dataSnapshot.getValue(userreg.class);
                        alertDialog1.setMessage("Name is:" + userprofile.getName());
                        alertDialog1.setMessage("Your Contact No:" + userprofile.getPnum());
                        alertDialog1.setMessage("Your Vehicle No is:" + userprofile.getVeclno());
                        alertDialog1.show();
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {
                        Toast.makeText(MapSelect.this,databaseError.getCode(),Toast.LENGTH_SHORT).show();
                    }
                });

userreg.java

包 com.example.bhavya.epark;

公共类用户注册{ public String name,mailid,pnum,veclno;

public userreg(){

}


public userreg(String name,String mailid,String pnum,String veclno){
    this.name=name;
    this.mailid=mailid;
    this.pnum=pnum;
    this.veclno=veclno;

}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getMailid() {
    return mailid;
}

public void setMailid(String mailid) {
    this.mailid = mailid;
}

public String getPnum() {
    return pnum;
}

public void setPnum(String pnum) {
    this.pnum = pnum;
}

public String getVeclno() {
    return veclno;
}

public void setVeclno(String veclno) {
    this.veclno = veclno;
}

}

数据库结构:-

图片参考 https://i.stack.imgur.com/owWJr.jpg

【问题讨论】:

  • 也发布你的数据库结构和 userreg 类
  • 你的数据库图片链接不可点击
  • 链接现在可以点击了。

标签: android


【解决方案1】:

您指向错误的数据库引用。您的数据库有一个名为 Users 的节点,但您的代码没有。

代替

DatabaseReference databaseReference = udetail.getReference(mAuth.getUid());
databaseReference.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    userreg userprofile = dataSnapshot.getValue(userreg.class);
                    alertDialog1.setMessage("Name is:" + userprofile.getName());
                    alertDialog1.setMessage("Your Contact No:" + userprofile.getPnum());
                    alertDialog1.setMessage("Your Vehicle No is:" + userprofile.getVeclno());
                    alertDialog1.show();
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                    Toast.makeText(MapSelect.this,databaseError.getCode(),Toast.LENGTH_SHORT).show();
                }
            });

使用

DatabaseReference databaseReference = udetail.getReference().child("Users");

databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    for (DataSnapshot messageSnapshot: dataSnapshot.getChildren()) {
        userreg userprofile = messageSnapshot.getValue(userreg.class);
        Log.v("info",String.valueOf(userprofile));
    }
        //Do whatever you like to do with your data here
}


@Override
public void onCancelled(DatabaseError databaseError) {
                Toast.makeText(MapSelect.this,databaseError.getMessage(),Toast.LENGTH_SHORT).show();
            }
});

【讨论】:

  • 我已经进行了建议的更改,现在它没有抛出任何空指针异常,但我无法检索数据并将其显示在警报对话框中。请帮我解决一下。
  • 非常感谢!现在工作正常。用户配置文件超出范围。!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多