1 java firebase firebase-realtime-database firebase-admin
我正在尝试从一个简单的 Java 程序将数据添加到 firebase 实时数据库 它按照https://firebase.google.com/docs/database/admin/save-data 中的描述正确执行
但我没有看到 firebase 控制台的数据 - 它实际上没有被添加到数据库中
代码
public static void main(String[] args) {
FileInputStream serviceAccount;
try {
serviceAccount = new FileInputStream("E:\\development\\firebase\\key\\svbhayani_realtimedb-98654-firebase-adminsdk-n75sy-49f62c9338.json");
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(serviceAccount))
.setDatabaseUrl("https://realtimedb-98654.firebaseio.com")
.build();
FirebaseApp.initializeApp(options);
final FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference ref = database.getReference("sameer");
DatabaseReference usersRef = ref.child("users");
Map<String, String> users = new HashMap<>();
users.put("HaiderAli", "HaiderAli");
users.put("sameer", "HaiderAli");
usersRef.setValueAsync(users);
System.out.println("Done");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
如果有人可以解释 - bcoz 没有任何错误,我从https://firebase.google.com/docs/database/admin/save-data获取并执行了相同的步骤
您的程序在 SDK 完成写入之前终止。 setValueAsync是异步的,所以当写入在另一个线程上完成时它会立即返回。这意味着 main 函数也会立即返回。当 main 函数返回时,java 进程终止,异步写入永远不会完成。您需要做的是让您的程序等到写入完成。
setValueAsync返回一个ApiFuture对象,可让您跟踪异步操作的结果。让程序等待 ApiFuture 完成的最简单的方法可能是使用它的 get() 方法:
ApiFuture<Void> future = usersRef.setValueAsync(users);
future.get(10, TimeUnit.SECONDS); // wait up to 10s for the write to complete
Run Code Online (Sandbox Code Playgroud)
在实际的生产代码中,您可能想要做一些更复杂的事情,例如聆听 ApiFuture 的结果以继续您的代码或处理错误。
在此博客中阅读有关使用 Admin SDK 进行异步操作的更多信息。
| 归档时间: |
|
| 查看次数: |
792 次 |
| 最近记录: |