【问题标题】:Is it possible to read Firebase data without attaching any listeners?是否可以在不附加任何侦听器的情况下读取 Firebase 数据?
【发布时间】:2014-04-14 22:02:22
【问题描述】:

我正在开发一个 Firebase Android 应用,需要一种方法来从 Firebase 读取数据,而无需实际附加任何侦听器。如果在初始读取后数据发生变化,我不在乎这种特殊情况。有没有一种方法可以直接访问 DataSnapshot 而无需将 EventListener 附加到 Firebase 引用?或者有没有其他方法可以直接从 Firebase 参考中读取某种 ref.getValue() 等效项?

谢谢。

【问题讨论】:

    标签: java android firebase


    【解决方案1】:

    您可以使用 Firebase 的 REST API 来访问“原始”数据。

    发件人:https://www.firebase.com/docs/rest-api.html

    您可以使用任何 Firebase 网址作为 REST 端点。您需要做的就是将“.json”附加到 URL 的末尾,然后从您最喜欢的 HTTPS 客户端发送请求。请注意,HTTPS 是必需的。 Firebase 仅响应加密流量,以确保您的数据安全。

    curl https://SampleChat.firebaseIO-demo.com/users/jack/name.json
    

    成功的请求将由 200 OK HTTP 状态代码指示。响应将包含正在检索的数据:

    {"first":"Jack", "last": "Sparrow"}
    

    同一页面还提到了一个 Java 包装器项目:https://github.com/bane73/firebase4j

    【讨论】:

    • 是的,我知道这件事。我只是希望我可以避免弄乱 AsyncTasks 和解析 JSON,而只是通过 Firebase java 客户端访问数据。
    【解决方案2】:

    the Java SDK 提供了一个addListenerForSingleValueEvent 方法,相当于你的 ref.getValue()。它的使用方式与addValueEventListener 类似,但只检索单个值。

    fb.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snap) {
            System.out.println(snap.getName() + " -> " + snap.getValue());
        }
    
        @Override public void onCancelled() { }
    });
    

    正如弗兰克所说,REST API 也是一个不错的选择。

    【讨论】:

    • 如何存储从onDataChange 方法返回的getValue 以便在其他地方使用。?
    • 您不会“存储”要在其他地方使用的值,因为这是一个异步事件。你对事件“做出反应”。创建一个 Observable 并触发一个事件给监听器;将回调传递给调用此代码的代码,并在完成时触发该回调;或者,探索承诺。
    • @Johny19 不,不应该。 OP 问题的答案是No 正如 Kato 明确指定的。 Kato 提供了一种解决方案,用于获取 从事件 中的数据,这是 OP 明确不想要的。
    • @Kato ,他不想附加听众!
    猜你喜欢
    • 2021-08-20
    • 2017-03-14
    • 1970-01-01
    • 2022-12-14
    • 2015-05-14
    • 2018-02-12
    • 1970-01-01
    相关资源
    最近更新 更多