Firebase 数据库返回 null

Posted

技术标签:

【中文标题】Firebase 数据库返回 null【英文标题】:Firebase database return null 【发布时间】:2020-08-20 04:06:55 【问题描述】:

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

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 the 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 消息,“city”和“town”变量显示为空。我希望它会显示“Antalya”+“Alanya”作为祝酒词:

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

【问题讨论】:

请发布您的数据库结构的屏幕截图以及哪些值返回 null? 请将您的数据库结构添加为 JSON 文件或至少是屏幕截图。还请指出您获得空值的行。请回复@AlexMamo @AlexMamo 现在你可以看看我的问题了 【参考方案1】:

由于数据是从 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 以获得更好的理解。

【讨论】:

以上是关于Firebase 数据库返回 null的主要内容,如果未能解决你的问题,请参考以下文章

反应本机 firebase 实时数据库参考返回 null

Firebase 快照返回 null

当数据存在时,Swift firebase 快照返回 null

Firebase Rest Api 从我的模型类中读取数据返回 null [重复]

Firebase Remote消息在remotemessage.getDate()上返回null数据

Firebase用户为已注册的用户返回空元数据