无法从 java admin sdk 将数据添加到 firebase 实时数据库
Not able to add data to firebase realtime database from java admin sdk
我正在尝试通过一个简单的 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();
}
}
如果有人能解释 - 因为我没有收到任何错误并执行了 https://firebase.google.com/docs/database/admin/save-data
中的相同步骤
您的程序在 SDK 完成写入之前终止。 setValueAsync
是异步的,所以它 returns 立即在另一个线程上完成写入。这意味着主函数也立即returns。当您的主函数 returns 时,java 进程终止,并且异步写入永远不会完成。您需要做的是让您的程序等待写入完成。
setValueAsync returns an ApiFuture 对象,可让您跟踪异步操作的结果。要让程序等待 ApiFuture 完成一段时间,最简单的方法可能就是使用它的 get() 方法:
ApiFuture<Void> future = usersRef.setValueAsync(users);
future.get(10, TimeUnit.SECONDS); // wait up to 10s for the write to complete
在实际的生产代码中,您可能想要做一些更复杂的事情,例如听取 ApiFuture 的结果以继续您的代码或处理错误。
Read more about async operations with the Admin SDK in this blog.
我正在尝试通过一个简单的 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();
}
}
如果有人能解释 - 因为我没有收到任何错误并执行了 https://firebase.google.com/docs/database/admin/save-data
中的相同步骤您的程序在 SDK 完成写入之前终止。 setValueAsync
是异步的,所以它 returns 立即在另一个线程上完成写入。这意味着主函数也立即returns。当您的主函数 returns 时,java 进程终止,并且异步写入永远不会完成。您需要做的是让您的程序等待写入完成。
setValueAsync returns an ApiFuture 对象,可让您跟踪异步操作的结果。要让程序等待 ApiFuture 完成一段时间,最简单的方法可能就是使用它的 get() 方法:
ApiFuture<Void> future = usersRef.setValueAsync(users);
future.get(10, TimeUnit.SECONDS); // wait up to 10s for the write to complete
在实际的生产代码中,您可能想要做一些更复杂的事情,例如听取 ApiFuture 的结果以继续您的代码或处理错误。
Read more about async operations with the Admin SDK in this blog.