从 Firebase 数据库中删除项目
Delete item from the Firebase database
我正在尝试从以下列表中删除一个项目。但是当我尝试获取密钥时,它显示的用户 ID 密钥是 NsShnb2enJcYEkfeE2fiSzbDc6O2
。但是我想抢每个post的key。例如,如果用户点击列表中的第一项,它应该抓取键 KSGhFSZg....
类似问题有很多答案,但这里的数据库结构大不相同。
这是我用过的代码。
mAdapter = new FirebaseRecyclerAdapter<Note, FirebaseNoteViewHolder>(Note.class, R.layout.item_note, FirebaseNoteViewHolder.class, mRef) {
@Override
public void populateViewHolder(FirebaseNoteViewHolder noteMessageViewHolder, final Note noteMessage, final int position) {
noteMessageViewHolder.setTitle(noteMessage.getTitle());
noteMessageViewHolder.setUpdatedDate(DateFormat.getInstance().format(noteMessage.getDataModified()));
noteMessageViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Toast.makeText(getActivity(), noteMessage.getDataModified().toString(), Toast.LENGTH_LONG).show();
databaseReference.orderByChild("dataModified").equalTo(noteMessage.getDataModified().toString()).addListenerForSingleValueEvent(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String key = dataSnapshot.getKey();
Toast.makeText(getActivity(), key, Toast.LENGTH_LONG).show();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
});
}
};
提前致谢!
您正在获取父密钥,因此您可以尝试:
databaseReference.orderByChild("dataModified").equalTo(noteMessage.getDataModified().toString()).addListenerForSingleValueEvent(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String key = dataSnapshot.getKey();
int positionCount=0;
for(DataSnapshot note : dataSnapshot.getChildren()){
if(positionCount==position){
firebase.child("notes").child(key).child(note .getKey()).removeValue();
Toast.makeText(getActivity(), note.getKey(), Toast.LENGTH_LONG).show();
}
positionCount++;
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
要获取您的密钥,您应该提供请求的完整路径。在你的情况下
databaseReference.child("notes" + "/" + yourUserId ).orderByChild("dataModified").equalTo(noteMessage.getDataModified().toString()).addListenerForSingleValueEvent(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String key = dataSnapshot.getKey();
Toast.makeText(getActivity(), key, Toast.LENGTH_LONG).show();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
我正在尝试从以下列表中删除一个项目。但是当我尝试获取密钥时,它显示的用户 ID 密钥是 NsShnb2enJcYEkfeE2fiSzbDc6O2
。但是我想抢每个post的key。例如,如果用户点击列表中的第一项,它应该抓取键 KSGhFSZg....
类似问题有很多答案,但这里的数据库结构大不相同。
这是我用过的代码。
mAdapter = new FirebaseRecyclerAdapter<Note, FirebaseNoteViewHolder>(Note.class, R.layout.item_note, FirebaseNoteViewHolder.class, mRef) {
@Override
public void populateViewHolder(FirebaseNoteViewHolder noteMessageViewHolder, final Note noteMessage, final int position) {
noteMessageViewHolder.setTitle(noteMessage.getTitle());
noteMessageViewHolder.setUpdatedDate(DateFormat.getInstance().format(noteMessage.getDataModified()));
noteMessageViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Toast.makeText(getActivity(), noteMessage.getDataModified().toString(), Toast.LENGTH_LONG).show();
databaseReference.orderByChild("dataModified").equalTo(noteMessage.getDataModified().toString()).addListenerForSingleValueEvent(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String key = dataSnapshot.getKey();
Toast.makeText(getActivity(), key, Toast.LENGTH_LONG).show();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
});
}
};
提前致谢!
您正在获取父密钥,因此您可以尝试:
databaseReference.orderByChild("dataModified").equalTo(noteMessage.getDataModified().toString()).addListenerForSingleValueEvent(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String key = dataSnapshot.getKey();
int positionCount=0;
for(DataSnapshot note : dataSnapshot.getChildren()){
if(positionCount==position){
firebase.child("notes").child(key).child(note .getKey()).removeValue();
Toast.makeText(getActivity(), note.getKey(), Toast.LENGTH_LONG).show();
}
positionCount++;
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
要获取您的密钥,您应该提供请求的完整路径。在你的情况下
databaseReference.child("notes" + "/" + yourUserId ).orderByChild("dataModified").equalTo(noteMessage.getDataModified().toString()).addListenerForSingleValueEvent(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String key = dataSnapshot.getKey();
Toast.makeText(getActivity(), key, Toast.LENGTH_LONG).show();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});