为了账号安全,请及时绑定邮箱和手机立即绑定

无法从Java Admin SDK向Firebase实时数据库添加数据

无法从Java Admin SDK向Firebase实时数据库添加数据

哆啦的时光机 2021-04-16 18:34:10
我正尝试从一个简单的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();    }}如果有人可以解释-bcoz我没有收到任何错误,并从https://firebase.google.com/docs/database/admin/save-data执行了相同的步骤
查看完整描述

1 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

SDK结束写入之前,您的程序将终止。 setValueAsync是异步的,因此它在另一个线程上的写操作完成时立即返回。这意味着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

在实际的生产代码中,您可能需要做一些更复杂的事情,例如监听ApiFuture的结果以继续执行代码或处理错误。


查看完整回答
反对 回复 2021-04-28
  • 1 回答
  • 0 关注
  • 195 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信