无法从Firebase中移除孩子

时间:2019-04-14 13:00:27

标签: android firebase listview firebase-realtime-database

我有一个使用listView的待办事项列表应用程序,我可以设法向Firebase发送“任务”,然后在我的应用程序中显示它,但我无法从Firebase中删除特定任务。

我尝试使用.push()方法将数据发送到firebase,但是我无法设法检索它,因此现在使用.setValue()。我正在使用任务标题作为Firebase中的子对象,这就是我要删除的内容。

Intent myIntent = getIntent();
String email = myIntent.getExtras().getString("email");

public void addToDoElement(View view) {
    String title = mTitle.getText().toString();
    String content = mContent.getText().toString();
    task friendlyTask = new task(title, content);
    mTasksDatabaseReference = mFirebaseDatabase.getReference().child(email).child("tasks").child(title);
        mTasksDatabaseReference.setValue(friendlyTask);

}

public void deleteTask(View view) {
    TextView itemTitle = findViewById(R.id.task_title);
    String childToDelete = itemTitle.getText().toString();
    Toast.makeText(getApplicationContext(), "Deleted task: " + childToDelete, Toast.LENGTH_SHORT).show();  
    mTasksDatabaseReference.child(email).child("tasks").child(childToDelete).setValue(null);    //I am trying to delete the task title from firebase so that the entire task will be removed

这就是火力场的样子。例如,当我尝试删除第二个任务(任务标题2)时,什么也没发生

This is what my firebase project looks like

3 个答案:

答案 0 :(得分:0)

您应该使用

mTasksDatabaseReference.child(email).child("tasks").child(childToDelete).removeValue();

代替 setValue(null)

答案 1 :(得分:0)

addToDoElement中,您将mTasksDatabaseReference初始化为:

mTasksDatabaseReference = mFirebaseDatabase.getReference().child(email).child("tasks").child(title);

然后,您使用mTasksDatabaseReference中的deleteTask删除子级。

mTasksDatabaseReference.child(email).child("tasks").child(childToDelete).setValue(null);

但是由于您已经将mTasksDatabaseReference设置为对特定任务的引用,所以您现在正试图指向另一个任务下的任务。

public void deleteTask(View view) {
    TextView itemTitle = findViewById(R.id.task_title);
    String childToDelete = itemTitle.getText().toString();
    Toast.makeText(getApplicationContext(), "Deleted task: " + childToDelete, Toast.LENGTH_SHORT).show();  
    FirebaseDatabase.getInstance().getReference()
        .child(email).child("tasks").child(childToDelete).setValue(null);
}

答案 2 :(得分:0)

我用过

private void deleteOrder(String key) {
    requests.child(key).removeValue();
    adapter.notifyDataSetChanged();
}

请求是数据库引用,适配器是Firebase Recycler适配器