Firebase Java Admin SDK不起作用

Ida*_*viv 2 java firebase firebase-realtime-database firebase-admin

我正在关注Firebase网站上有关设置Java Admin SDK的文档.所以我将依赖项添加到build.gradle,并添加了以下代码:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.Map;

import com.google.firebase.FirebaseApp;
import com.google.firebase.FirebaseOptions;
import com.google.firebase.auth.FirebaseCredentials;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

public class Main {

    public static void main(String[] args) throws FileNotFoundException{
        FileInputStream serviceAccount = new FileInputStream("/Users/idanaviv10/Desktop/mapit-33290-firebase-adminsdk-fdy24-a1d0505493.json");

        FirebaseOptions options = new FirebaseOptions.Builder()
          .setCredential(FirebaseCredentials.fromCertificate(serviceAccount))
          .setDatabaseUrl("https://mapit-33290.firebaseio.com/")
          .build();

        FirebaseApp.initializeApp(options);
        final FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference ref = database.getReference("server/saving-data/fireblog");

        DatabaseReference usersRef = ref.child("users");

        Map<String, User> users = new HashMap<String, User>();
        users.put("alanisawesome", new User("June 23, 1912", "Alan Turing"));
        users.put("gracehop", new User("December 9, 1906", "Grace Hopper"));

        usersRef.setValue(users);
    }
    public static class User {

        public String date_of_birth;
        public String full_name;
        public String nickname;

        public User(String date_of_birth, String full_name) {
            // ...
        }

        public User(String date_of_birth, String full_name, String nickname) {
            // ...
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

问题是当我试图获取数据(添加侦听器)或尝试保存数据(如示例中)时没有发生任何事情.我在eclipse中运行代码,我可以在控制台中看到它打印"Done",但是当我检查数据库时(在浏览器上的firebase控制台上)没有任何变化. 在此输入图像描述

Ida*_*viv 8

我发现了问题,问题是程序将在连接到Firebase服务器之前终止.你需要做的是通过调用Thread.sleep(20000);或者像我做的那样 延迟程序的终止

Scanner scanner = new Scanner(System.in);
while(!scanner.nextLine().equals("Quit")){}
System.exit(0);  
Run Code Online (Sandbox Code Playgroud)


Hir*_*aka 5

您可以尝试的另一件事setValue()是使用TasksAPI 明确等待任务完成:

Task<Void> task = usersRef.setValue(users);
try {
    Tasks.await(task);
} catch (ExecutionException | InterruptedException e) {
    // Handle error if necessary
}
Run Code Online (Sandbox Code Playgroud)