如何使用 java/android 从 Firebase ONCE 读取数据?

Posted

技术标签:

【中文标题】如何使用 java/android 从 Firebase ONCE 读取数据?【英文标题】:How to read data from Firebase ONCE using java/android? 【发布时间】:2013-07-28 02:18:54 【问题描述】:

我正在尝试在 onCreate() 事件中使用 Java API 从 android 应用程序中的 Firebase 数据库中读取数据。换句话说,我正在尝试做最简单的阅读,相当于...

ref.once('value', function(snapshot) 

);

...在 javascript API 中。我正在尝试使用 addEventListenerForSingleValueEvent() 方法,但它似乎希望我覆盖 onDataChange() 方法,这不是我想要的。无论数据库事件如何,我都想在程序执行到达这一行时取出数据。这是我的(未完成的)功能......

protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.poll_table);    

        // First get the table layout
        tbl = (TableLayout) findViewById(R.id.pollsTable);

        // Now let's create the header
        TableRow tHead = createPollsTableHeader();

        // Add header to tableLayout
        tbl.addView(tHead, new TableLayout.LayoutParams(
                LayoutParams.MATCH_PARENT,
                LayoutParams.WRAP_CONTENT));

        // Add all polls in ref as rows
        polls.addListenerForSingleValueEvent(new ValueEventListener() 
            // DON'T KNOW WHAT TO DO HERE

        
    

我什至不认为这是正确的方法。我只是希望能够获得一个可以迭代并从中获取数据的 Datasnapshot,例如...

for (Datasnapshot child : datasnapshot) 

..就像我在 Javaxcript API 中使用 ref.once('value', function(snapshot) 事件一样。

【问题讨论】:

【参考方案1】:

这是正确的方法,而且您走在正确的轨道上。命名只是有点混乱(对不起!)。如果您执行 addListenerForSingleValueEvent,您重写的 onDataChange 方法将使用 DataSnapshot 仅调用一次,就像您希望的那样(就像“ref.once('value' ...)”会做的那样)。

所以你应该可以做到:

// Add all polls in ref as rows
polls.addListenerForSingleValueEvent(new ValueEventListener() 
    @Override
    public void onDataChange(DataSnapshot snapshot) 
        for (DataSnapshot child : snapshot.getChildren()) 
            ...
        
    

【讨论】:

我不得不使用 snapshot.getChildren() for (DataSnapshot child : snapshot.getChildren()) @realgt 哎呀,你是对的。更新了答案。谢谢! @MichaelLehenbauer 你能更新答案并从中获取数据吗? @MichaelLehenbauer 因此,如果您有两个相关的查询,例如从某个位置获取 id 并查询另一个集合以获取数据,那么我将不得不编写两个通过 onDataChange 连接的侦听器? 嗨,我有类似的东西,到目前为止它正在工作,我只获取一次数据,但是如果我在关闭应用程序并打开它时对数据进行更改(例如添加新元素)再次我没有得到更新的数据。我确实有 Internet 连接,并且确实将 setPersistenceEnabled 设置为 true,因此它也可以脱机工作。如果有连接,为什么我不能从后端获取信息?

以上是关于如何使用 java/android 从 Firebase ONCE 读取数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何从以下实时数据库结构中获取检索项目?

如何在 Java Android App 中使用从 Webserver 检索到的 JSON 来动态创建和使用对象

如何从 Java/Android 访问 Unity 设置?

如何从 java / android 中的嵌套 json 对象访问数据? [复制]

Java Android - 将数据从活动发送到片段

如何从 Java Android ping 外部 IP