我有一个允许用户添加笔记的应用程序。 注释应存储在Firebase数据库中。 我现在的问题是,我不能保存多个便笺,而只是更新数据库中已经存在的便笺。 我认为您可能需要为每个便笺添加一个唯一的ID,但是我不知道该怎么做。 那就是我现在所拥有的。
public class AddNoteFragment extends Fragment implements View.OnClickListener {
private EditText ETnoteTitle, ETnoteDesc, ETnoteLastDate;
private Button saveNoteBTN, deleteNoteBTN;
private Note note;
private FirebaseAuth mAuth;
private FirebaseDatabase db;
private DatabaseReference users;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_add_note, container, false);
mAuth = FirebaseAuth.getInstance();
db = FirebaseDatabase.getInstance();
ETnoteTitle = view.findViewById(R.id.noteTitle);
ETnoteDesc = view.findViewById(R.id.noteDesc);
ETnoteLastDate = view.findViewById(R.id.noteLastDate);
saveNoteBTN = view.findViewById(R.id.saveNoteBTN);
saveNoteBTN.setOnClickListener(this);
deleteNoteBTN = view.findViewById(R.id.deleteNoteBTN);
deleteNoteBTN.setOnClickListener(this);
users = db.getReference("Users").child(mAuth.getCurrentUser().getUid()).child("Notes");
return view;
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.saveNoteBTN:
note = new Note(ETnoteTitle.getText().toString().trim(),
ETnoteDesc.getText().toString().trim(),
ETnoteLastDate.getText().toString().trim());
users.setValue(note).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.d("NoteAdded", "true");
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d("NoteAdded", "false");
}
});
break;
case R.id.deleteNoteBTN:
break;
}
}
}
答案 0 :(得分:1)
您当前用于保存便笺的代码可归结为:
users = db.getReference("Users").child(mAuth.getCurrentUser().getUid()).child("Notes");
note = new Note(ETnoteTitle.getText().toString().trim(),
ETnoteDesc.getText().toString().trim(),
ETnoteLastDate.getText().toString().trim());
users.setValue(note)...
这将注释直接设置在用户的Notes
节点下。因此,如果您保存第二个便笺,则将覆盖第一个便笺。
要允许保存多个节点,您需要在Notes
下的JSON中创建一个额外的级别。最简单的方法是在写入值之前调用push()
。所以:
users.push().setValue(note)...
每次调用push()
时,Firebase客户端都会在该位置下生成一个唯一的子节点。我强烈建议您阅读working with lists of data上的Firebase文档,因为它对这个主题有更多的解释。
答案 1 :(得分:0)
您需要在插入数据对象之前添加随机ID
喜欢
users = db.getReference("Users").child(mAuth.getCurrentUser().getUid()).child("Notes").child(randomId);