【发布时间】:2018-06-19 10:00:43
【问题描述】:
我正在尝试在userId 下添加新的用户数据,但它正在将旧数据替换为新数据并添加另一个“用户”和“用户帐户设置”。
这是我的实时数据库: enter image description here
我的实时数据库必须是这样的:添加一个新的用户数据而不将旧数据替换为新数据,也不添加“用户”和“用户帐户设置”。
这是我想要的数据库结构示例:enter image description here
这是添加新用户的代码:
public void addNewUser(String email, String username, String bio, String website, String interests, String address, String profile_photo){
User user = new User(userID,1 , email, address, StringManipulation.condenseUsername(username));
myRef.child(mContext.getString(R.string.dbname_users))
.child(userID)
.child("users")
.push()
.setValue(user);
UserAccountSettings settings = new UserAccountSettings(
interests,
username,
0,
0,
0,
"",
username,
website,
bio
);
myRef.child(mContext.getString(R.string.dbname_user_account_settings))
.child(userID)
.child("user_account_settings")
.push()
.setValue(settings);
}
这是我从RegisterActivity.class 调用firebaseMethods.addNewUser 的代码:
private void setupFirebaseAuth(){
Log.d(TAG, "setupFirebaseAuth: setting up firebase auth.");
mAuth = FirebaseAuth.getInstance();
firebaseDatabase = FirebaseDatabase.getInstance();
myRef = FirebaseDatabase.getInstance().getReference();
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
// User is signed in
Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());
myRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
// 1st check: Make sure the username is not already in use
if (firebaseMethods.checkIfUsernameExists(username, dataSnapshot)){
append = myRef.push().getKey().substring(3,10);
Log.d(TAG, "onDataChange: username already exists. Appending random string to name: " + append);
}
username = username + append;
// add new user to the database
firebaseMethods.addNewUser(email,username,"","","","","");
Toast.makeText(mContext, "Signup successful. Sending verification email.", Toast.LENGTH_SHORT).show();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
finish();
} else {
// User is signed out
Log.d(TAG, "onAuthStateChanged:signed_out");
}
// ...
}
};
这是我现在的数据结构,Frank van Puffelen: enter image description here
【问题讨论】:
-
这与your other question 有何不同? (除了添加第二个问题)
-
我的另一个问题已经解决了,现在正在添加新的用户数据,但新用户数据的保存位置在“
path,to,data”中,如您所见在顶部的图像中。一定是这样,新的用户数据必须位于userId下,不能替换其他数据。就像示例图片一样。 -
如果您的其他问题已解决,那么为什么这里的第二种情况与其他问题中的问题完全相同?
-
只是不完全一样。我将删除所有问题并添加新问题..
标签: java android firebase firebase-realtime-database