基本的Firebase / Java读/写

时间:2018-10-29 11:09:19

标签: java android firebase

此刻,我感到很愚蠢。之前我已经做了很多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);

2 个答案:

答案 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”);

我不知道为什么,但是我已经使用了这个引用,因为没有其他作用。