【发布时间】:2020-04-19 09:28:17
【问题描述】:
我是 Firebase 和 android studio 的新手,我正在尝试让多个节点保存在 Firebase 中,我有一个节点可以保存给“用户”,但我需要另一个节点来保存“预算”类别节省。最初我认为我的 OnClickListener 存在问题,但经过检查,它工作正常。 这是在我的注册中发送用户数据的代码:
private void sendUserData(){
String UserID = firebaseAuth.getUid();
RegDB regDB = new RegDB(emailDb, nameDb, passwordDb);
mDatabase.child("Users").child(UserID).setValue(regDB);
}
这是在我的预算页面中发送用户数据的代码:
private void sendUserData() {
String UserID = firebaseAuth.getUid();
CategoriesDB catDb = new CategoriesDB(travel_budget, entertainment_budget, fitness_budget, beauty_budget, clothes_budget, holiday_budget, food_budget, mobile_budget);
mDatabase.child("Users").child(UserID).child("Categories").setValue(catDb);
}
尽管 Firebase 为每个注册的人分配了一个唯一的用户 ID,并且此 ID 存储在实时数据库和身份验证中,但当我尝试输入预算时,我不断收到此错误:
java.lang.NullPointerException: Can't pass null for argument 'pathString' in child()
作为参考,这是我的注册页面的 OnClickListener:
button_Upload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (validate()) {
String emailDb = email.getText().toString().trim();
String passwordDb = password.getText().toString().trim();
firebaseAuth.createUserWithEmailAndPassword(emailDb, passwordDb).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
sendUserData();
firebaseAuth.signOut();
Toast.makeText(Register.this, "Successfully Registered!", Toast.LENGTH_SHORT).show();
finish();
startActivity(new Intent(Register.this, Menu.class));
} else {
Toast.makeText(Register.this, "Registration Failed.", Toast.LENGTH_SHORT).show();
}
}
});
也是我的预算页面的 OnClickListener:
btn_subCat.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(validate()){
sendUserData();
Toast.makeText(Categories.this, "Completed!", Toast.LENGTH_LONG).show();
finish();
startActivity(new Intent(Categories.this, Menu.class ));
}else{
Toast.makeText(Categories.this, "Submission failed", Toast.LENGTH_LONG).show();
}
}
});
【问题讨论】:
-
记录用户 ID。 getUid() 可能不会返回任何内容
-
从 firebase 分配的用户 ID 出现在我的 logcat 中,如下所示:'/traktrail.example.com D/FirebaseAuth: Notifying id token listeners about user (1JSfWVLNBQUDMDlBIT3mlqYJC6W2)。 /traktrail.example.com D/FirebaseAuth:通知有关用户的身份验证状态侦听器 (1JSfWVLNBQUDMDlBIT3mlqYJC6W2)。 '
标签: java firebase android-studio firebase-realtime-database