Невозможно добавить данные в базу данных реального времени firebase из Java Admin SDK - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь добавить данные в базу данных реального времени с помощью простой Java-программы. Он выполнен правильно, как описано в 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 Ответ

0 голосов
/ 26 июня 2018

Ваша программа завершает работу, прежде чем SDK сможет завершить запись. setValueAsync является асинхронным, поэтому возвращается немедленно, когда запись завершается в другом потоке. Это означает, что основная функция также сразу возвращается. Когда ваша основная функция возвращается, 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, чтобы продолжить ваш код или обработать ошибки.

Подробнее об асинхронных операциях с Admin SDK в этом блоге .

...