从Firebase通过ID检索Java对象

时间:2016-04-27 17:55:21

标签: java android firebase firebase-realtime-database

我正在编写一个Android应用程序,我正在尝试通过其Firebase相关表中的ID检索类User.java的对象。我想知道如何从Java端获取它,只要我尝试Firebase Official docs 中所述的示例,但它们都不适用于我。

以这个SO问题为例,我想要一个带有以下界面的方法:

public User readUser(String userId);

换句话说,我想执行:

readUser(-lnnROTBVv6FznK81k3n)

并检索关联的User对象

由于

-------------------------------------------- - - - - - - - - - 编辑 - - - - - - - - - - - - - - - - -------------------------------

我设法使用此代码获取值:

public void retrieveUser(final String email){
        firebaseUsersRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot messageSnapshot: dataSnapshot.getChildren()) {
                    if(messageSnapshot.getKey().equals(Email.encodeID(email))){

                        retrievedUser = messageSnapshot.getValue(User.class);
                        break;
                    }
                }
            }

            @Override
            public void onCancelled(FirebaseError firebaseError) { }
        });
    }

请不要检索用户是一个班级attribute,因此是field。我从代码中访问该字段,但即使我看到它需要调试器上的值,它在调用代码上为空。

任何提示?我不能只在方法本身中返回它,所以它会是?:

public User retrieveUser(final String email);

由于

1 个答案:

答案 0 :(得分:3)

所以这里是灵魂,但我并没有把它放在一个方法中。

final String uid = "your Uid here"; 
        // Get a reference to users
        Firebase ref = new Firebase(Constants.FIREBASE_URL_USERS);
        // Attach an listener to read our users
        ref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot snapshot) {

                for (DataSnapshot user: snapshot.getChildren()) {
               //this is all you need to get a specific user by Uid
                    if (user.getKey().equals(uid)){
                        wantedUser = user.getValue(User.class);
                    }
               //**********************************************

                }
                Log.i(TAG, "onDataChange: " + wantedUser.getName());
            }
            @Override
            public void onCancelled(FirebaseError firebaseError) {
                System.out.println("The read failed: " + firebaseError.getMessage());
            }
        });