2017-05-13 2 views
0

私のAndroidプロジェクトでFirebase-UIを電子メール/パスワードプロバイダで使用しています。データベースの構造は次のとおりです。サインアップにはデフォルト値を追加するfirebase

profiles 
    user-id 
     age 
     height 
    user-id 

私は、デフォルト値を持つプロファイルに新しいノードを入力します。ユーザーは後で値を編集して保存することができます。既存のユーザーの場合、値を読み込んでUIに表示するだけです。私はChildEventListenerとdataSnapshot.hasChild(uid)を使って、ユーザーが既に存在していても動作していないかどうかを検出しようとしました。

mAuthStateListener = new FirebaseAuth.AuthStateListener() { 
     @Override 
     public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
      FirebaseUser user = mFirebaseAuth.getCurrentUser(); 
      if(user != null) 
      { 
       onSignedInInitialize(user); 
      } 
      else 
      { 
       onSignedOutCleanup(); 
       startActivityForResult(AuthUI.getInstance().createSignInIntentBuilder().setProviders(providers).build(), SIGN_IN); 
      } 
     } 
    }; 

これは私がしようとしたものです::これはAuthStateListenerある

private void onSignedInInitialize(final FirebaseUser user) { 
    userRef = mProfilesDBReference.child(user.getUid()); 

    if(mValueEventListener == null) 
    { 
     mValueEventListener = new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       if(dataSnapshot.getValue() == null) 
       { 
        UserProfile profile = new UserProfile("username", null, 100, 100); 
        userRef.setValue(profile); 
        UpdateUI(profile); 
       } 
       else 
       { 
        UserProfile profile = dataSnapshot.getValue(UserProfile.class); 
        UpdateUI(profile); 
       } 


      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }; 
    } 

    userRef.addValueEventListener(mValueEventListener); 
    } 

答えて

1

は、ユーザーIDがuidに保存されているとしましょう。 このような高さと年齢を取得できます。

DatabasReference userRef = database.getReference("profiles").child(uid); 
userRef.addValueEventListener(new ValueEventListener() { 
@Override 
public void onDataChange(DataSnapshot dataSnapshot) { 
    if(dataSnapshot.getValue() == null){ 
     //User data doesnt exist 
    } 
    else 
    { 
    HashMap<String,String> userMap = 
     (HashMap<String,String>)dataSnapshot.getValue(); 
    String age = userMap.get("age"); 
    String height = userMap.get("height"); 
    } 
} 

@Override 
public void onCancelled(DatabaseError databaseError) { 

} 
}); 

私はあなたがそれらをStringsとして保存していると仮定していますが、firebaseは通常intをlongsに変換します。したがって、intを使用した場合は、ハッシュマップの値のタイプをLongに変換してください。 もっと良い方法は、POJOクラスを作成することです。

+0

私が共有したコードをご覧ください。 – JSmith

+0

ありがとうございました:) – JSmith

関連する問題