Firebase数据库返回空值

时间:2020-05-05 13:17:41

标签: android database firebase firebase-realtime-database

当我读取Firebase数据库citytown变量时,为什么显示为空,为什么?

Denemesiralamaisyerleri deneme=new Denemesiralamaisyerleri();
            FirebaseUser firebaseUser=firebaseAuth.getCurrentUser();
            String id=firebaseUser.getUid();
            DatabaseReference userdata=FirebaseDatabase.getInstance().getReference().child("users").child(id);
            ValueEventListener rdn=new ValueEventListener() {
                @Override
                public void onDataChange( DataSnapshot dataSnapshot) {     //read user info from database
                    deneme=dataSnapshot.getValue(Denemesiralamaisyerleri.class);

            }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
                    Toast.makeText(UserInterfaceBerber.this,databaseError.getMessage(),Toast.LENGTH_LONG).show();
                }
            }; 
            userdata.addValueEventListener(rdn); 
            city=deneme.getCity();
            town=deneme.getTown();
            ilin.setText(city);
            ilcenin.setText(town);
            Toast.makeText(UserInterfaceBerber.this,city+" "+town+" ",Toast.LENGTH_LONG).show();

我的数据库结构如下:

users
igORGoET3gT6i8CV4wvtuN3l08z1
city: 
"Antalya"
email: 
"ahmetbulur@gmail.com"
namesurname: 
"Ahmet bulur"
phonenum: 
"05346789445"
town: 
"Alanya"

此土司消息城市和城镇变量也显示为空,我希望在土司消息中向我显示“安塔利亚” +“阿拉尼亚”

Toast.makeText(UserInterfaceBerber.this,city+" "+town+" ",Toast.LENGTH_LONG).show();

1 个答案:

答案 0 :(得分:0)

由于数据是从Firebase异步加载的,因此仅应在操作完成时使用该数据,并且仅在onDataChange()方法内部使用此数据,如以下代码行所示:

Denemesiralamaisyerleri deneme=new Denemesiralamaisyerleri();
FirebaseUser firebaseUser=firebaseAuth.getCurrentUser();
String id=firebaseUser.getUid();
DatabaseReference userdata=FirebaseDatabase.getInstance().getReference().child("users").child(id);
ValueEventListener rdn=new ValueEventListener() {
    @Override
    public void onDataChange( DataSnapshot dataSnapshot) {     //read user info from database
        deneme=dataSnapshot.getValue(Denemesiralamaisyerleri.class);
        city=deneme.getCity();
        town=deneme.getTown();
        ilin.setText(city);
        ilcenin.setText(town);
        Toast.makeText(UserInterfaceBerber.this,city+" "+town+" ",Toast.LENGTH_LONG).show();
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Toast.makeText(UserInterfaceBerber.this,databaseError.getMessage(),Toast.LENGTH_LONG).show();
    }
};
userdata.addValueEventListener(rdn);

有关更多信息,建议您从此 post 中查看答案的最后部分,在其中我已经解释了如何使用自定义回调来完成。您也可以查看此 video 以获得更好的理解。