gpt4 book ai didi

java - 使用 Java 从 firebase 抓取数据

转载 作者:行者123 更新时间:2023-11-29 07:29:46 28 4
gpt4 key购买 nike

下面这段代码有问题,它几乎是从 Firebase SDK Java 文档中逐字复制过来的。我是 Java 等真正语言的新手,来自 PHP 和 JavaScript 的网络开发背景。

基本上 addListenerForSingleValueEvent 不会触发来返回数据。我注意到这一点是因为系统打印输出没有触发,因此我假设监听事件没有触发。

我怀疑这与我对函数本身如何工作的了解有限有关,就像我缺少一些关于类和函数如何相互作用的结构知识。

如有任何帮助,我们将不胜感激。

class FireBase {
public static void main(String[] args) throws IOException {
// Fetch the service account key JSON file contents
FileInputStream serviceAccount = new FileInputStream("key.json");

// Initialize the app with a service account, granting admin privileges
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredential(FirebaseCredentials.fromCertificate(serviceAccount))
.setDatabaseUrl("https://ssworks-adwords.firebaseio.com/")
.build();
FirebaseApp.initializeApp(options);

// As an admin, the app has access to read and write all data, regardless of Security Rules
DatabaseReference ref = FirebaseDatabase
.getInstance()
.getReference("petitions");
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
System.out.println("Before Get Value");
Object document = dataSnapshot.getValue();
System.out.println(document);
}

@Override
public void onCancelled(DatabaseError arg0) {
// TODO Auto-generated method stub
System.out.println("This didn't work");
}
});
}

}

最佳答案

如果您有一个通过某个类的主函数在命令行上调用的 Java 程序,您必须防止该主函数在数据库监听器触发之前返回。否则,程序将立即终止并且监听器将永远不会触发。请务必记住,所有 Firebase 监听器都是异步的,并且 Firebase 管理自己的守护线程以与服务器通信。

对于让一个简单的程序等待直到监听器触发的情况,你可以使用这种模式来阻塞主线程等待监听器:

CountDownLatch latch = new CountDownLatch(1);
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
System.out.println("onDataChange: " + dataSnapshot);
latch.countDown();
}

@Override
public void onCancelled(DatabaseError databaseError) {
System.out.println("onCanceled: " + databaseError);
latch.countDown();
}
});
latch.await();

使用 CountDownLatch 不是您唯一的选择。您可以做任何您想做的事情来确保进程不会停止,包括让主线程 hibernate 的时间长于监听器触发所需的时间。

关于java - 使用 Java 从 firebase 抓取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44548932/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com