我正在尝试从Firebase实时数据库中检索Usuario
对象。
命令p.getOferecedor()
返回第二个图像的oferecedor
字段上突出显示的值,该值匹配我正在尝试检索的正确usuario
的UUID。
我可以从Android Studio的调试器(参见第3张图片)看到引用确实设置为正确的位置,但是(参见第1张图片)虽然参考设置正确,但我得到的所有字段的null
值物体。
任何帮助是极大的赞赏。
这是代码的相关部分:
DatabaseReference dbRef;
dbRef = FirebaseDatabase.getInstance().getReference();
dbRef.child("usuario").child(p.getOferecedor());
dbRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
User user = dataSnapshot.getValue(User.class);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
对于第二张图片中其他图片上的字段,我很抱歉,但这是我正在为公司开发的应用程序,所以我向您展示的信息越小,我失去这份工作的风险就越小。
Edit1 - User.java文件和dataSpanshot.getValue()。toString值 来自p.getOferecedor的值:(直接来自LogCat)
onDataChage: returnString: 9t00TAdw2LXCzS8hyrETqTrESVk2
dataSpanshot.getValue()。toString值的值:(直接来自LogCat)
onDataChage: returnString: {usuario={9t00TAdw2LXCzS8hyrETqTrESVk2={[email protected], sobrenome=Palumbo Gaiarsa , crm=0, nome=Pedro, uuid=9t00TAdw2LXCzS8hyrETqTrESVk2}}, plantao={-L6NJKWt9HUR_KG4Qo49={anoFim=2018, minutoFim=30, mesFim=1, inicio=false, remuneracao=3333333, minutoInicio=30, diaInicio=27, diaFim=27, mesInicio=1, local=Kkkkkkk, anoInicio=2018, oferecedor=9t00TAdw2LXCzS8hyrETqTrESVk2, horaFim=14, horaInicio=14}, -L6NHkctPMYGmcOPeyLl={anoFim=2018, minutoFim=24, mesFim=1, inicio=false, remuneracao=3333, minutoInicio=24, diaInicio=27, diaFim=27, mesInicio=1, local=Foda-se , anoInicio=2018, oferecedor=9t00TAdw2LXCzS8hyrETqTrESVk2, horaFim=14, horaInicio=14}, -L6NH_3l4akzIfcJhrv_={anoFim=2018, minutoFim=23, mesFim=1, inicio=false, remuneracao=6666, minutoInicio=23, diaInicio=27, diaFim=27, mesInicio=1, local=Ooop, anoInicio=2018, oferecedor=Jh12qQACjOMyvo3Uo0LEVeitp843, horaFim=14, horaInicio=14}}, historico={9t00TAdw2LXCzS8hyrETqTrESVk2={oferecido={-L6NHkcvnSeJNqLcd5QS={anoFim=2018, minutoFim=24, mesFim=1, inicio=false, uuid=-L6NHkctPMYGmcOPeyLl, remuneracao=3333, minutoInicio=24, diaInicio=27, diaFim=27, mesInicio=1, local=Foda-se , anoInicio=2018, oferecedor=9t00TAdw2LXCzS8hyrETqTrESVk2, horaFim=14, horaInicio=14}, -L6NJKX4n3gjg6ieQmid={anoFim=2018, minutoFim=30, mesFim=1, inicio=false, uuid=-L6NJKWt9HUR_KG4Qo49, remuneracao=3333333, minutoInicio=30, diaInicio=27, diaFim=27, mesInicio=1, local=Kkkkkkk, anoInicio=2018, oferecedor=9t00TAdw2LXCzS8hyrETqTrESVk2, horaFim=14, horaInicio=14}}}}}
User.java包point.cursoandroid.com.medpoint;
public class User {
private String nome;
private String sobrenome;
private String email;
private String telefone;
private String UUID;
private int crm;
private String[] ocupacao;
public User() {
}
public String getUUID() {
return UUID;
}
public void setUUID(String UUID) {
this.UUID = UUID;
}
public int getCrm() {
return crm;
}
public void setCrm(int crm) {
this.crm = crm;
}
public String[] getOcupacao() {
return ocupacao;
}
public void setOcupacao(String[] ocupacao) {
this.ocupacao = ocupacao;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getSobrenome() {
return sobrenome;
}
public void setSobrenome(String sobrenome) {
this.sobrenome = sobrenome;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getTelefone() {
return telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
}
一个问题是您引用了数据库根目录。
你需要做的是获取指向你孩子的第二个数据库引用并使用它:
DatabaseReference dbRef;
dbRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference childRef = dbRef.child("usuario").child(p.getOferecedor());
childRef.addListenerForSingleValueEvent(new ValueEventListener() {
...
另一个是你的User
课程。
如果您阅读documentation,您可以看到如果您使用POJO从Realtime Database读取数据,则只需使用以下类型:
String
Long
Double
Boolean
Map<String, Object>
List<Object>
所以你需要将你的String[]
字段转换为List<String>
。
或者为了拥有一个复杂的字段,你需要有另一个java POJO(Plain Old Java Object)。
我建议你尝试使用最简单的字段,并在用最简单的POJO测试POJO之后逐个添加复杂的字段。
所以尝试使用User.java
:
@IgnoreExtraProperties
public class User {
public String nome;
public String sobrenome;
public String email;
public String uuid;
public User() {
}
}
那是因为如果通过反射创建POJO出了问题,你会得到一个null
参考。