我正在尝试构建 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/