我认为如果我解释一下我真正想要的东西会更好。这是我的数据库的样子:
我想为每个创建的锦标赛添加锦标赛状态,但我在数据检索方面遇到了问题。我有一个名为UserInformation的自定义类,我使用dataSnapshot.getValue()方法,但我不确定如何动态地将锦标赛对象(使用2个布尔值)添加到用户。我已经尝试添加所述对象的arraylist,但这并没有反映在数据库中。
这是我创建用户的代码:
mAuth.createUserWithEmailAndPassword(emailId, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
String userId = mAuth.getCurrentUser().getUid();
DatabaseReference currentUser = mDatabase.child(userId);
currentUser.child("name").setValue(name);
currentUser.child("studentNumber").setValue(studentNumber);
currentUser.child("faculty").setValue(mFaculty);
currentUser.child("email").setValue(emailId);
currentUser.child("isGod").setValue(false);
currentUser.child("tournamentStatuses").setValue(new ArrayList<TournamentStatus>());
Toast.makeText(RegisterActivity.this,"User successfully registered\nLogged in as "+name,Toast.LENGTH_SHORT).show();
mProgressDialog.dismiss();
}
我的预感是问题在于ArrayList。 此外,即使我能够添加用户,我将如何检索特定的锦标赛状态?
这是我的UserInformation类:
public class UserInformation {
public String name;
public String studentNumber;
public String faculty;
public boolean isAdmin;
public String email;
public boolean isGod;
public ArrayList<TournamentStatus> tournamentStatuses;
//Define this constructor
public UserInformation() {
// Default constructor required for calls to DataSnapshot.getValue(UserInformation.class)
}
public boolean isGod() {
return isGod;
}
public void setGod(boolean god) {
isGod = god;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getStudentNumber() {
return studentNumber;
}
public void setStudentNumber(String studentNumber) {
this.studentNumber = studentNumber;
}
public String getFaculty() {
return faculty;
}
public void setFaculty(String faculty) {
this.faculty = faculty;
}
public boolean isAdmin() {
return isAdmin;
}
public void setAdmin(boolean admin) {
isAdmin = admin;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public ArrayList<TournamentStatus> getTournamentStatuses() {
return tournamentStatuses;
}
public void setTournamentStatuses(ArrayList<TournamentStatus> tournamentStatuses) {
this.tournamentStatuses = tournamentStatuses;
}
}
有没有解决方法,或者我应该更改数据库设计?
答案 0 :(得分:1)
为了使您的工作更轻松,您需要更改一点数据库设计。而不是tournamentStatuses
直接使用tournamentId
作为节点的名称,如下所示:
Firebase-root
|
---- Tournaments
| |
| ---- //
---- Users
|
---- userId
|
---- // user details
|
---- tournamentId
|
---- isOrganizing: false
|
---- isPaticipating: false
通过这种方式,您可以更轻松地查询数据库:
DatabaseReference yourRef = FirebaseDatabase.getInstance().getReference().child("Users").child(uid).child(tournamentId);
其次,要将数据对象写入Firebase数据库,而不是使用List
,请使用Map
。您需要在pojo中进行此更改,并且还需要使用setValue()
方法。
希望它有所帮助。