Google App引擎中的Firebase管理SDK设置

时间:2017-02-04 02:12:08

标签: google-app-engine firebase firebase-admin

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云端模块中执行上述操作。我认为我的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

1 个答案:

答案 0 :(得分:0)

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

尝试使用DatabaseReference返回的push()上的{{3}}实际为数据库写一个值。