【发布时间】:2016-05-28 04:23:46
【问题描述】:
我最近开始从旧的 Firebase API 迁移到新的 Google Firebase。我遵循Getting Started Guide 并能够创建一个管理员访问帐户并生成一个 JSON 文件,并且成功地(我认为)使用示例代码初始化了 SDK:
FirebaseOptions options = new FirebaseOptions.Builder()
.setServiceAccount(new FileInputStream("C:\\FileStructure\\Test Dev Project-59ee6eb5842a.json"))
.setDatabaseUrl("https://test-dev-project-96fd5.firebaseio.com/")
.build();
FirebaseApp.initializeApp(options);
我的问题是将任何信息推送到我的数据库中。我运行应用程序(在 NetBeans 中),它运行没有问题。
// Create a database based on the initialized Firebase App
FirebaseDatabase database = FirebaseDatabase.getInstance();
// Reference to the root of the database created.
DatabaseReference ref = database.getReference();
// Create a child to the root node
DatabaseReference dataRef = ref.child("Hello World");
dataRef.setValue("I'm writing data", new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
if (databaseError != null) {
System.out.println("Data could not be saved " + databaseError.getMessage());
} else {
System.out.println("Data saved successfully.");
}
}
});
据我理解,代码是根据实例化的App绘制数据库引用,setValue()、push()、update()、事务数据将数据推回数据库。
我实际上已经复制并粘贴了数据directly from the new API reference page on saving data,但数据仍然没有出现在我的控制台上。我还可以补充一点,我的控制台甚至没有确认我是否正确或错误地推送了数据。
我感觉好像忘记了一些小事,我不确定我是否正确创建了引用。
我对实际在 Stack Overflow 上发帖还很陌生,所以请告知我是否遗漏了重要数据或正确发布了某些内容。
感谢您的宝贵时间,伙计们。
【问题讨论】:
-
最常见的原因是您的 Java 程序在 Firebase 客户端将数据发送到数据库之前退出。您可以通过在程序末尾添加
Thread.sleep(10000)轻松验证是否是原因。 -
感谢您的建议。我会试试!我认为导致睡眠被认为是不好的编码习惯,在这种情况下我是否只需要破例?
-
看来你是对的; Java 程序没有时间将信息正确地推送到数据库中。我的想法是,为了消除对 Thread.sleep(10000) 的需要; ,我可以改为创建一个 JavaFX 应用程序,它只是在推送成功时通知用户。
-
是的。有很多方法可以解决这个问题,
Thread.sleep()实际上只是用于故障排除。如果您想在非交互式 Java 程序中执行此操作,您可以使用信号量让它等到写入完成。 -
见stackoverflow.com/questions/37098006/…顺便说一句。但我不能将此标记为重复,因为该答案既未被接受也未被赞成。有时 Stack Overflow 的这些规则会妨碍您。 :-/
标签: java firebase firebase-realtime-database