【发布时间】:2018-03-27 11:05:57
【问题描述】:
我对 Firebase 比较陌生,我试图通过将用户数据放入两个不同的路径来避免分层数据,就像它在 documentation 中所说的那样。因此,计划是让每个用户拥有两个不同的唯一标识符;一个节点用于他或她的帐户信息,另一个节点用于任务板。所以每个用户都应该有一个信息节点和一个任务板节点。
问题是我不能多次使用同一个唯一标识符。
这个 sn-p 在数据库中创建用户:
private void addUser(final String email, String password, final String lastName, final String firstName) {
auth.createUserWithEmailAndPassword(email,password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
Log.d(TAG, "createUserWithEmail:success");
FirebaseUser user = auth.getCurrentUser();
//Create a reference for task board ids
taskBoardRef = database.getReference().child("taskboard_ids");
String boardId = taskBoardRef.push().getKey();
Log.i("Check",boardId);
//Attach user object to user reference
userRef.push().setValue(new Employee(firstName,lastName,email,boardId));
//Attach a default task board to the taskboard
taskBoardRef.push().setValue(new TaskBoard("Default"));
//Create a new SessionManagement instance
//Temporarily store user info
SessionManagement sessionManagement = new SessionManagement(getApplicationContext(),auth.getCurrentUser().getEmail());
sessionManagement.createLoginSession();
//Go to task activity
intent = new Intent(getApplicationContext(),TasksActivity.class);
startActivity(intent);
finish();
}
});
}
这是任务板类: 任务板.java
public class TaskBoard {
private String taskBoardName;
private FirebaseDatabase database = FirebaseDatabase.getInstance();
private DatabaseReference ref = database.getReference("users_tasks");
private DatabaseReference refForTaskBoard = database.getReference("user_task_boards");
public TaskBoard(){}
TaskBoard(String name){taskBoardName = name;}
public List<Task> tasks;
public List<Task> getTasks() {
return tasks;
}
public String getTaskBoardName(){return taskBoardName; }
public HashMap<String, Boolean> addTask(Task task)
{
HashMap<String, Boolean> result = new HashMap<>();
result.put(task.getName(),task.isComplete());
return result;
}
public static class Task {
private String name;
private boolean complete;
public Task(){}
public Task(String name, boolean complete)
{
this.name = name;
this.complete = complete;
}
public String getName() {
return name;
}
public boolean isComplete() {
return complete;
}
}
}
【问题讨论】:
标签: android firebase firebase-realtime-database