当前位置: 首页 > 知识库问答 >
问题:

在实时数据库中添加数据,但添加错误的子级

萧浩漫
2023-03-14

我试图在用户ID下添加新的用户数据,但它将旧数据替换为新数据,并添加另一个“users”和“user\u account\u settings”。

这是我的实时数据库:在此处输入图像描述

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

这就是我想要的数据库结构示例:在此处输入图像描述

这是用于添加新用户的代码:

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

这是我调用firebaseMethods的代码。从注册表活动添加新用户。类别:

 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:在这里输入图像描述

共有3个答案

阎丰
2023-03-14

删除上面的这一行:

myRef=FirebaseDatabase。getInstance()。getReferenceFromUrl(“”https://my-app-e37d8.firebaseio.com/path/to/data");

然后做类似的事情:

myRef。子(“用户”)。子(用户ID)。设置值(YourClass.class);

输入您的类名,而不是您的类

或者,如果只存储字符串,则只需执行以下操作:

myRef.child("用户"). child(userId). setValue("Hello World");

乐正远
2023-03-14

您在这些代码段中写入了错误的位置:

.child(userID)
.child("users")
.push()

这将导致路径/$uid/users/-L ,这不是您想要的。相反,您希望路径为/users/$uid,这意味着您的代码需要与此匹配:

.child("users")
.child(userID)

因此,您的addNewUser变为:

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)
            .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)
            .setValue(settings);
}
袁安志
2023-03-14

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

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

然后位置将是userid,您添加的任何数据都将在它下面。

 类似资料:
  • 我正在Java创建一个航班应用程序,它应该做的事情之一是添加一个新的航班到数据库。我可以添加航班名称没有问题,但我有问题添加航班的座位数到数据库。数据库表被设置为将座席数作为整数值。在我的代码中,将这个值从用户界面添加到数据库的函数将一个值作为整数参数。然后,在添加新航班的实际按钮的事件处理程序代码中,我将值从字符串(这是文本框中接受的字符串)转换为整数,以便将值输入数据库。然而,当我运行我的代码

  • 线程“AWT-EventQueue-0”java.lang.ClassCastException中的异常:类net.ucanAccess.jdbc.UCANAccessSpreparedStatement无法强制转换为类com.mysql.jdbc.PreparedStatement(net.ucanAccess.jdbc.UCANAccessSpreparedStatement和com.mysq

  • 添加一条数据 第一种是实例化模型对象后赋值并保存: $user = new UserModel; $user->user_nickname = '老猫'; $user->user_email = 'genmaowan@163.com'; $user->save(); 也可以使用data方法批量赋值: $user = new UserModel; $user->

  • 添加一条数据 使用 Db 类的 insert 方法向数据库提交数据 $user = ['user_nickname'=>'老猫']; Db::name('user')->insert($user); insert 方法添加数据成功返回添加成功的条数,insert 正常情况返回 1 添加数据后如果需要返回新增数据的自增主键,可以使用getLastInsID方法: Db::name('user')-

  • 添加一条数据 第一种是实例化模型对象后赋值并保存: $user = new UserModel; $user->user_nickname = '老猫'; $user->user_email = 'genmaowan@163.com'; $user->save(); 也可以使用data方法批量赋值: $user = new UserModel; $user->