0
FirebaseOptions options = new FirebaseOptions.Builder()
                .setCredential(FirebaseCredentials.applicationDefault())
                .setDatabaseUrl("https://mkastrive.firebaseio.com")
                .build();
        FirebaseApp defaultApp = FirebaseApp.initializeApp(options);
        DatabaseReference ref = defaultDatabase
                .getInstance()
                .getReference("users");

        ref.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                System.out.println("in onDataChange");
                System.out.println(dataSnapshot.getValue());
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                System.out.println("in onCancelled");
                System.out.println(databaseError.toString());
            }
        });

我在 Android 的 Google Cloud 模块中执行上述操作。我认为我的 Firebase 的初始化是成功的,因为 System.out.println("usersRef.push(): " + usersRef.push()); // Working 但我没有看到任何addListenerForSingleValueEvent. 我也没有在日志中看到任何错误/警告。我的数据库规则是为任何人都可以读取/写入数据而设置的。

更新 1:根据使用 setValue() 的建议,我尝试了 firebase 文档上的示例:

DatabaseReference usersRef1 = ref.child("users");

Map<String, User> users = new HashMap<String, User>();
users.put("alanisawesome", new User("June 23, 1912", "Alan Turing"));
users.put("gracehop", new User("December 9, 1906", "Grace Hopper"));

usersRef1.setValue(users);

但这也不是插入数据库,也没有错误。日志是空白的。

更新 2:一些日志

FirebaseApp defaultApp = FirebaseApp.initializeApp(options);
this.defaultDatabase = FirebaseDatabase.getInstance().getReference();
defaultDatabase.child("users").getPath(): https://mkastrive.firebaseio.com
defaultDatabase.child("users").getPath(): /users
4

1 回答 1

0

调用push()不会对数据库进行任何更改。这可能就是为什么没有调用您的侦听器的原因。 push()只返回一个DatabaseReference,您可以使用它在该引用表示的位置进行更改。该位置的密钥(唯一推送 ID)完全在客户端生成。

尝试使用返回的setValue()将值实际写入数据库。DatabaseReferencepush()

于 2017-02-04T02:56:13.543 回答