如何从 Firebase 加载孩子

Posted

技术标签:

【中文标题】如何从 Firebase 加载孩子【英文标题】:How to load children from Firebase 【发布时间】:2020-09-09 03:46:38 【问题描述】:

我有一些代码可以存储特定操作系统在 Firebase 上的投票次数。我使用以下内容来存储它:

DatabaseReference windowsChoice;

在 onCreate 方法内部:

 FirebaseDatabase.getInstance().getReference("Windows");

在按钮方法中,我将数据存储到 firebase:

String id = "TimesClicked";
windowsChoice.child(id).setValue(b); //b holds the amount of times that Windows has been clicked

生成的格式是这样的:

"Windows":"TimesClicked":8,"choice1Num":23 // ignore choice1Num

以下代码将为我获取 Windows (TimesClicked:8) 的值:

String result = new Connector().execute().get();
JSONObject ob = new JSONObject(result);
String jsonString = ob.getString("Windows");

String id = "TimesClicked";
windowsChoice.child(id).setValue(b); 

intent.putExtra("result", jsonString);
startActivity(intent);

但是我怎样才能得到 TimesClicked 标签的值呢?

【问题讨论】:

【参考方案1】:

但是如何获取 TimesClicked 标签的值呢?

只需使用以下代码行:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference timesClickedRef = rootRef.child("Windows").child("TimesClicked");
ValueEventListener valueEventListener = new ValueEventListener() 
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) 
        long timesClicked = dataSnapshot.getValue(Long.class);
        Log.d("TAG", "timesClicked: " + timesClicked);
    

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) 
        Log.d("TAG", databaseError.getMessage()); //Don't ignore errors!
    
;
timesClickedRef.addListenerForSingleValueEvent(valueEventListener);

logcat 中的结果将是:

timesClicked: 8

【讨论】:

如果在方法内声明了 OnDataChange 之外的 timesClicked,我如何访问它? 你只能在那里使用它,或者你可以将它传递给另一个方法。这是因为 Firebase API 是异步的。有一个解决方法,您可以使用custom callback。 嘿,本!如果您认为我的回答对未来的 Firebase 开发者也有帮助,也请考虑投上一票(▲)。我真的很感激。谢谢!

以上是关于如何从 Firebase 加载孩子的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Firebase (Swift) 中删除一个孩子

如何从firebase数据库中获取一个孩子

如何使用 Firebase 将初始数据加载与增量子项分开?

当有唯一键 Kotlin 时如何从 Firebase 检索孩子

如何从孩子的 Firebase 获取数据?

如何从 Firebase Realtime DB 读取孩子的值?