2017-05-13 109 views
0

我正在使用電子郵件/密碼提供程序在我的Android項目中使用Firebase-UI。該數據庫的結構是:添加默認值firebase

profiles 
    user-id 
     age 
     height 
    user-id 

在註冊我想在配置文件中輸入一個新的節點與默認值。用戶可以稍後編輯和保存值。對於現有用戶,我只想讀取這些值並在UI中顯示它們。我已經嘗試使用ChildEventListener和dataSnapshot.hasChild(uid)來檢測用戶是否已經存在但它不工作。這是AuthStateListener:

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); 
      } 
     } 
    }; 

這是我曾嘗試:

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) { 

} 
}); 

請注意,我假定您已將它們存儲爲字符串,firebase通常會將整數轉換爲long。因此,如果您使用了整數,將hashmap的值類型轉換爲Long。 更好的方法是創建一個POJO類。

+0

請參閱我分享的代碼。 – JSmith

+0

感謝它的工作:) – JSmith