2016-04-27 12 views
2

私はAndroidアプリケーションを作成しており、Firebase関連のテーブルからIDでクラスUser.javaのオブジェクトを取得しようとしています。私はFirebase Official docsに記載されている例を試してみたが、どれも私のために働いていない限り、Java側から取得する方法を知りたい。FirebaseからIDでJavaオブジェクトを取得

例として、このSO質問を取って、私は次のインターフェイスを持つメソッドをしたい:つまり

public User readUser(String userId); 

、私が実行したい:

readUser(-lnnROTBVv6FznK81k3n)

および関連Userを取得オブジェクト

ありがとうございました

----------------------------------------------- --------------- EDIT ---------------------------------- ----------------------------

私はこのコードで値を取得するために管理:

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です。私はコードからそのフィールドにアクセスしていますが、デバッガ上で値を受け取ります。これは、呼び出しコードでNULLになっています。

ヒント?私もこの方法でそれを入れていなかったので、ここでsoultionがあるCan'tは、私はちょうど方法自体にそれを返すので、それは?:

public User retrieveUser(final String email); 

おかげ

答えて

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

ありがとうございます。しかし、完全な方法をお勧めしますか?実際のユーザーをオブジェクトとして取得するにはどうすればよいか分かりません –

+0

私はメソッドとして作成しようとしましたが、内側のローカルフィールドを呼び出したときに問題を引き起こす内部クラスがあります。ただし、ユーザーインスタンスを定義し、このコードを呼び出してインスタンス化することができます。あなたはそのオブジェクトであなたが望むことをすることができます。 –

+0

ありがとうございました。コードに翻訳してください。私はそれを得ていません –

関連する問題