此刻,我感到很愚蠢。之前我已经做了很多Android Studio / Java / Firebase编码,并且对此感到很满意。休息片刻之后又回到了它,我将所有内容都更新到了最新版本,而我只是无法让我的测试应用程序与数据库对话。
我创建了一个新的Firebase项目,下载了google-services文件,使用了Android Studio助手(告诉我已连接),并使用了文档中简单的读/写“ hello world”代码。
代码运行,并且我在日志窗口中正确获得了“读取”输出,但是在Firebase控制台上看不到数据。如果然后我只运行“读取”代码,我什么也没得到,因此,“写入”仅在数据库引用处于范围内时才有效。
我几乎没有什么可以改变的东西,因此对于应该如此简单的事情感到非常沮丧-我很可能会做一些愚蠢的事情。
任何关于为什么会发生这种情况的想法都会受到赞赏。
Android Studio 3.2.1,Firebase库16.0.4,SDK版本28,Google服务4.2.0
代码基本上是直接从文档中获取的。
TIA。
database = FirebaseDatabase.getInstance();
myRef = database.getReference("Message");
// Write
myRef.child("Monday").setValue("Hello, Lovely World!");
// Read
ValueEventListener listener;
listener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// This method is called once with the initial value and again
// whenever data at this location is updated.
String value = dataSnapshot.getValue(String.class);
String key = dataSnapshot.getKey();
Log.e(TAG, "Key is : " + key + " Value is: " + value);
}
@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
Log.e(TAG, "Failed to read value.", error.toException());
}
};
myRef.addValueEventListener(listener);
答案 0 :(得分:1)
基本上您做对了。
但是请记住,FirebaseDatabase.getInstance().getReference()
代表数据库的根。
所以您可能想尝试myRef.child("sample_key").setValue("sample_value");
这将在数据库的根目录下创建一个键值对。您正在尝试为数据库设置一个值而不给它一个密钥,这会导致错误。
FYI,myRef.addValueEventListener(listener)
表示侦听整个数据库。
myRef.child("sample_key").addValueEventListener(listener)
表示仅监听sample_key
的值。
请记住,当您不再需要时致电removeEventListener(listener)
。
https://firebase.google.com/docs/database/admin/save-data
DatabaseReference usersRef = ref.child("users");
会将值保存到子项,而不是ref
本身。答案 1 :(得分:0)
我有同样的问题。我不得不改用Firebase参考。我的代码如下:
Firebase myRef;
//关于创建方法
myRef =新的Firebase(“将URL插入firebase”);
我不知道为什么,但是我已经使用了这个引用,因为没有其他作用。