Java 在firebase数据库中创建新的用户条目,每次用户在Android中注册时

Java 在firebase数据库中创建新的用户条目,每次用户在Android中注册时,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我目前正在开发一个测验应用程序,用户通过firebase通过电子邮件和pw注册 注册后,他将传递一个昵称,该昵称将用于获得高分 因此,基本上我希望该应用程序添加这些类型的用户信息,每次用户注册时,如所附图片所示 为了实现这一点,我使用了以下代码: public class createNickname extends AppCompatActivity { private static final String TAG = "createNickname"; private

我目前正在开发一个测验应用程序,用户通过firebase通过电子邮件和pw注册

注册后,他将传递一个昵称,该昵称将用于获得高分

因此,基本上我希望该应用程序添加这些类型的用户信息,每次用户注册时,如所附图片所示

为了实现这一点,我使用了以下代码:

public class createNickname extends AppCompatActivity {
    private static final String TAG = "createNickname";

    private FirebaseDatabase mFirebaseDatabase;
    private FirebaseAuth.AuthStateListener mAuthListener;
    private EditText NicknameInput;
    private Button NicknameReg;
    private String Nickname, UserId;
    private FirebaseAuth mAuth;
    private String EmailEntry;
    private DatabaseReference myref = mFirebaseDatabase.getInstance().getReference();

    @Override
    protected void onCreate( Bundle savedInstanceState ) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_create_nickname);

        NicknameInput = (EditText)findViewById(R.id.etNickname);
        NicknameReg = (Button)findViewById(R.id.btsetNickname);

        mAuth = FirebaseAuth.getInstance();

        myref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange( DataSnapshot dataSnapshot ) {
                String value = dataSnapshot.getValue(String.class);
                Log.d(TAG, "value is: " + value);
            }

            @Override
            public void onCancelled( DatabaseError databaseError ) {
                Log.w(TAG, "Failed to read value.", databaseError.toException());
            }
        });

        NicknameReg.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick( View view ) {
                Log.d(TAG, "onClick: Attempting to add object to database.");
                String newNick = NicknameInput.getText().toString();
                if (!newNick.equals("")) {
                    FirebaseUser user = mAuth.getCurrentUser();
                    UserId = user.getUid();
                    EmailEntry = user.getEmail();
                    myref.child("userlist").push().setValue(UserId);
                    myref.child("userlist").child(UserId).push().setValue(EmailEntry);
                    myref.child("userlist").child(UserId).push().setValue(0);

                    startActivity(new Intent(getApplicationContext(), LoginActivity.class));
                }
            }
        });
    }

    @Override
    public void onStart() {
        super.onStart();
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();
    }
 }
所以现在的问题是,我做错了什么? 用户是在firebase的“身份验证”窗口中创建的,但数据库没有更新

我是否正确地将数据库作为目标?您如何决定要针对哪个数据库


以下是我的firebase安全规则: { 规则:{ .读:错, .写:错 } }

关于数据库,如果我做对了,什么都不会发生

我从未收到任何错误消息。

首先,我建议您修改代码,以便您知道何时以及是否写入Firebase失败/成功

在您的情况下,您将得到一个权限拒绝错误,因为您的安全规则设置为false->没有人有读/写数据库的权限。相反,您可以授予每个用户写入自己数据的权限,如下所示:

{
  "rules": {
    "userlist": {
      "$user_id": {
        // grants write access to the owner of this user account
        // whose uid must exactly match the key ($user_id)
        ".write": "$user_id === auth.uid"
      }
    }
  }
}
有关更多信息,请参阅

要使上述功能正常工作,您还必须更改用于写入数据库的代码。当前您正在使用推送。这是你不需要的。相反,您可以使用:

myref.childuserlist.push.setValueUserId


您还可以查看更多有关此主题的信息。

到底发生了什么?你的期望和实际结果是什么?有错误吗?如果出现权限被拒绝的错误,你也应该发布你的安全规则。我可能可以帮助你,但我需要更多的信息。这些是我的firebase安全规则:{rules:{.read:false、.write:false}}关于数据库,如果我做对了,什么都不会发生。你也需要什么吗?啊,结束,我现在收到错误消息,你能在你的问题中包含这些信息吗?您可以使用问题下方的按钮。完成,是否还有其他要添加的内容?
myref.child("userlist").child(UserId).child("email").setValue(EmailEntry);
myref.child("userlist").child(UserId).child("highscore").setValue(0);