Firebase中的DataSnapstatgetValue()返回NULL

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (92)

在我的主活动的onCreate()方法中,我的一个例程是与Firebase数据库通信,以完成以下三件事之一:1)如果用户是返回的用户,则使用SharedPreferences本地存储的Firebase更新他们的所有首选项。2)如果用户是新用户,没有数据存储在云上(他们从未下载过应用程序),则什么也不做。3)如果用户是新用户,但其首选项存储在其唯一的Facebook配置文件ID下,请下载他们的首选项并将它们应用到SharedPreferences实例中。

我肯定缺少了一些关于DataSnapshot如何工作的关键(可能是基本的)洞察力,因为我无法让下面的代码工作:

    private void initializeFirebase(){
    my_db = FirebaseDatabase.getInstance();
    DatabaseReference my_ref = my_db.getReference();

    Map<String, ?> values = sharedPreferences.getAll();

    if (values.isEmpty()){
        final String id = Profile.getCurrentProfile().getId();
        my_ref = my_ref.child("userid");
        my_ref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if (dataSnapshot.getKey().equals(id)){
                    data = (Map<String, Object>)dataSnapshot.getValue();
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }
    else {
        for (Map.Entry<String, ?> entry : values.entrySet()) {
            my_ref.child("userid").child(Profile.getCurrentProfile().
                    getId()).child(entry.getKey()).setValue(entry);
        }
    }
}

Data是一个全局Map变量,在执行getValue()之后始终为NULL。

我的JSON树被组织为:root->user->userid->每个首选项作为userid节点的子节点。任何帮助都将不胜感激!

提问于
用户回答回答于

根据getValue()的API文档,它可以返回null:

此快照中包含的数据为本机类型,如果此位置没有数据,则为null。

因此,你查询的位置没有数据。

我猜你不想在你的引用中硬编码“userid”的值。我打赌你的意思是使用上一行中用户的id:

final String id = Profile.getCurrentProfile().getId();
my_ref = my_ref.child(id);  // id instead of "userid"

扫码关注云+社区

领取腾讯云代金券