我正在关注instruction来测试firebase实时数据库,但在保存数据后无法在控制台上看到任何数据(在下面运行initialize()和saveData()方法)。 并且日志没有显示任何错误。 有什么问题?
public static void initialize() {
// Fetch the service account key JSON file contents
try {
FileInputStream serviceAccount = new FileInputStream(keyPath);
// Initialize the app with a service account, granting admin privileges
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(serviceAccount))
.setDatabaseUrl("https://myprojectId.firebaseio.com")
.build();
FirebaseApp.initializeApp(options);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void saveData() {
final FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference ref = database.getReference("test");
DatabaseReference usersRef = ref.child("vocabularies");
Map<String, Vocabulary> vocabularies = new HashMap<>();
Vocabulary v1 = new Vocabulary();
v1.setWord("hello");
v1.setDefinition("hello definition");
v1.setTranslation("hello translation");
Vocabulary v2 = new Vocabulary();
v2.setWord("world");
v2.setDefinition("world definition");
v2.setTranslation("world translation");
vocabularies.put("hello", v1);
vocabularies.put("world", v2);
usersRef.setValueAsync(vocabularies);
}
答案 0 :(得分:0)
根据有关DatabaseReference课程的官方文档,没有setValueAsync()
方法。唯一可以帮助您直接在引用上设置值的方法是setValue()
方法。
答案 1 :(得分:0)
经验丰富的工程师提问,这是因为保存数据任务在新线程中运行,并且在主线程完成时上传数据之前终止。为了验证解释,我只需添加
Thread.sleep(3000);
在main方法中的saveData()之后。它成功了。
答案 2 :(得分:0)
在我的情况下,导致此错误是因为我没有在https://console.developers.google.com/apis/api/securetoken.googleapis.com/overview?project=上为该项目启用令牌服务API。 在此处插入您的项目名称 >