2016-04-27 37 views
2

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

有鉴于此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); 

感谢

回答

3

所以这里是soultion,我没有把它放在一个方法虽然。

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()); 
      } 
     }); 
+0

感谢您的回答,但是,请您将完整的方法?我不确定如何检索实际用户作为对象 –

+0

我试图将其作为一种方法,但您有一个内部类,在您从内部调用本地字段时会引起问题。但是你可以定义一个用户实例并调用这个代码来实例化它。那么你可以用这个对象做你想做的事。 –

+0

谢谢朋友,请把它翻译成代码?我不太明白 –