【发布时间】:2020-03-09 11:56:32
【问题描述】:
我正在尝试使用 Firebase Admin SDK 将值保存到 Firebase 实时数据库,但无论我做什么,都没有保存任何值。与教程不同,我从一个完全空的数据库开始:
- 我已连接到数据库(使用 .info/connected 参考和 ref.addValueEventListener 验证)
- 安全规则允许读写
- 使用服务帐户,它的 json 文件似乎已正确解析和加载
- 如果我创建一个根引用对象并打印它的值,它正确地指向数据库 url
Firestore 创建了一个集合和文档,如果我从 Firestore 视图切换到实时数据库,数据库也有这个集合和文档。
但是如果我按下根链接,文档和集合就会消失。我也经常将“数据”视为空值。数据是文件吗?一个领域?只是说整个数据库是空的吗?有时它会在“data: null”和“coconut-xxx:null”之间交替,这很奇怪。
我也尝试引用 /telemetry/data 并对其进行写入,但这没有用。当我将 CompletionListener 添加到 setValue 时,CompletionListener 似乎永远不会被调用,所以连接挂起还是什么?
我的代码:
String url = databaseUrl.getProtocol() + "://" + databaseUrl.getHost();
InputStream stream = getClass().getClassLoader().getResourceAsStream("firebaseCredentials.json");
GoogleCredentials credentials = GoogleCredentials.fromStream(stream);
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(credentials)
.setDatabaseUrl(url)
.build();
FirebaseApp.initializeApp(options);
DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
ref.setValueAsync("12345");
我也尝试过像教程中那样发送地图,但这也不起作用。
我猜可能唯一的另一件事是我在 IntelliJ Android Studio 插件中执行此操作。不过,这似乎不太可能成为问题。
感谢任何帮助。谢谢!
【问题讨论】:
-
嗯..我正在看这个“应用程序”的东西。现在看起来我正在使用默认应用程序。 Firebase 控制台显示我有两个项目,其中一个是椰子。我没有添加任何应用程序.. 这有关系吗?但是,没有可用的应用程序与我正在做的事情相匹配。
-
不是 java 开发人员,但在 Node.js 中,通常使用“推送、更新、设置”将记录以键值对的形式插入 Firebase,类似于 firebase.database().ref("根节点").push({ ChatStartTime: new Date().toLocaleString() });
-
感谢 ASP 的评论! setValueAsync 是设置操作,我也试过setValue。我试过推送一次,但没有更新。我认为如果 set 或 push 都不起作用,那么该更新也不会。我只是尝试过,但似乎没有什么不同。
标签: java firebase firebase-realtime-database firebase-admin intellij-plugin