2016-04-27 78 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

謝謝朋友,請把它翻譯成代碼?我不太明白 –