gpt4 book ai didi

java - 在实时数据库中添加数据但添加了错误的子项

转载 作者:行者123 更新时间:2023-12-02 11:06:25 24 4
gpt4 key购买 nike

我尝试在 userId 下添加新的用户数据,但它会将旧数据替换为新数据,并添加另一个“users”和“user_account_settings”。

这是我的实时数据库: enter image description here

我的实时数据库必须是这样的:添加新的用户数据,而不将旧数据替换为新数据,也不添加“users”和“user_account_settings”。

这是我想要的数据库结构示例: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

最佳答案

如果您想在 userid 下添加数据,请执行以下操作:

DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("users").child("userid");

然后该位置将是userid,您添加的任何数据都将位于其下方。

关于java - 在实时数据库中添加数据但添加了错误的子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50925599/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com