Firebase(android)没有返回对象

时间:2018-02-27 18:48:03

标签: android firebase firebase-realtime-database

我正在尝试从Firebase实时数据库中检索Usuario对象。

命令p.getOferecedor()返回第二个图像的oferecedor字段上突出显示的值,该字段与我想要检索的正确usuario的UUID相匹配。

我可以从Android Studio的调试器(参见第3张图片)看到引用确实设置为正确的位置,但是(参见第1张图片)虽然参考设置正确,但我得到{{1}对象的所有字段的值。
非常感谢任何帮助 这是代码的相关部分:

null

enter image description here

enter image description here

enter image description here

对于第二张图片中剩余图片上的字段,我们很抱歉,但这是我正在为公司开发的应用程序,所以我向您展示的信息越小,我失去这个的风险就越小工作

Edit1 - User.java文件和dataSpanshot.getValue()。toString值
来自p.getOferecedor的值:(直接来自LogCat)

        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) {

            }
        });
来自dataSpanshot.getValue()。toString值的

值:(直接来自LogCat)

onDataChage: returnString: 9t00TAdw2LXCzS8hyrETqTrESVk2

User.java     package point.cursoandroid.com.medpoint;

onDataChage: returnString: {usuario={9t00TAdw2LXCzS8hyrETqTrESVk2={email=pegaiarsa@gmail.com, 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}}}}}

1 个答案:

答案 0 :(得分:3)

一个问题是您引用了数据库根目录。

您需要做的是获取指向您孩子的第二个数据库引用并使用它:

DatabaseReference dbRef;
dbRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference childRef = dbRef.child("usuario").child(p.getOferecedor());

childRef.addListenerForSingleValueEvent(new ValueEventListener() {
    ...

另一个人在你的User班上。

如果您阅读documentation,您可以看到,如果您使用POJO从实时数据库中读取数据,则只需使用以下类型:

  • 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引用。