Java 在firebase数据库中创建新的用户条目,每次用户在Android中注册时
我目前正在开发一个测验应用程序,用户通过firebase通过电子邮件和pw注册 注册后,他将传递一个昵称,该昵称将用于获得高分 因此,基本上我希望该应用程序添加这些类型的用户信息,每次用户注册时,如所附图片所示 为了实现这一点,我使用了以下代码: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
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);