将数据推送到 Firebase 的 Java 应用程序

标签 java firebase firebase-realtime-database firebase-admin

我正在尝试构建 Java 应用程序来检索数据并将数据保存到 Firebase 数据库。 我关注了this link并下载服务帐户详细信息并在项目中使用相同的信息。我正在 IntelliJ 上构建一个项目并添加了所需的所有依赖项。但我无法将任何数据保存到 Firebase 或从 Firebase 检索任何数据。 运行代码时我没有收到任何错误。

public class Database {
private static final String DATABASE_URL = "https://DATABASE-NAME.firebaseio.com";
private static final String FILE_NAME = "services-account-downloaded-file.json";
private static DatabaseReference database;

public static void main(String args[]) {
    // Initialize Firebase
    try {
        // [START initialize]
        FileInputStream serviceAccount = new FileInputStream(FILE_NAME);

        FirebaseOptions options = new FirebaseOptions.Builder()
                .setCredential(FirebaseCredentials.fromCertificate(serviceAccount))
                .setDatabaseUrl(DATABASE_URL)
                .setDatabaseAuthVariableOverride(null)
                .build();
        FirebaseApp.initializeApp(options);
        // [END initialize]
    } catch (IOException e) {
        System.out.println("ERROR: invalid service account credentials. See README.");
        System.out.println(e.getMessage());

        System.exit(1);
    }
    // Shared Database reference
    database = FirebaseDatabase.getInstance().getReference();
    startListeners();
    try {
        Thread.sleep(20000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

public static void startListeners() {
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference ref = database.getReference().child("user");
    ref.setValue("userdata", new DatabaseReference.CompletionListener() {
        @Override
        public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
            if (databaseError != null) {
                System.out.println("Data could not be saved " + databaseError.getMessage());
            } else {
                System.out.println("Data saved successfully.");
            }
        }
    });
}

}

最佳答案

需要注意的是:FirebaseCredential 已被弃用,取而代之的是 GoogleCredentials。

尝试将初始化 block 更改为:

       // [START initialize]
    FileInputStream serviceAccount = new FileInputStream(FILE_NAME);

    GoogleCredentials credentials = GoogleCredentials
        .fromStream(serviceAccount)
        .createScoped(Arrays.asList("https://www.googleapis.com/auth/firebase.database"));

    FirebaseOptions options = new FirebaseOptions.Builder()
            .setCredentials(credentials)
            .setDatabaseUrl(DATABASE_URL)
            .build();
    FirebaseApp.initializeApp(options);
    // [END initialize]

关于将数据推送到 Firebase 的 Java 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49210851/

相关文章:

java - 如何使用具有相同值的多个 Java 注解?

javascript - 为复杂的 Firebase 查询提供 Angular 服务

ios - Swift Firebase 检查认证更顺畅

java - 使用干净的代码基于 "template" HashMap 动态创建 HashMap

java - 如何在 Eclipse 中使用 JPL(swi-prolog 的 java prolog 接口(interface))?

java - 反序列化空值以使用 Jackson 进行枚举

java - 每次发送消息时是否需要重建RabbitMQ连接

firebase - Firestore 安全规则 : searching for a user's id in array in a document

android - 如何在 Firebase 的对话框登录下方添加忘记密码链接?

javascript - Firebase 和 HTML 表之间的实时更新