2017-07-06 69 views
1

从addChildEventListener调用以下函数,以便在需要时从我的Firebase数据库中删除特定节点。 这里的问题是函数启动“删除项目”。表示任务已成功执行,但该节点保持在数据库上。Android - 关于从Firebase数据库中删除节点的问题

有人能告诉我什么是错的?

private void showData(DataSnapshot ds) { 
 
    String keyValue = null; 
 

 
    if(ds.hasChildren()) { 
 
     keyValue = ds.getKey(); 
 

 
     Toast.makeText(getActivity().getApplicationContext(), "Removing item...", Toast.LENGTH_SHORT).show(); 
 
     ds.getRef().child(keyValue).removeValue().addOnCompleteListener(new OnCompleteListener<Void>() { 
 
      @Override 
 
      public void onComplete(@NonNull Task<Void> task) { 
 
       if (task.isSuccessful()) { 
 
        Toast.makeText(getActivity().getApplicationContext(), "Item removed.", Toast.LENGTH_SHORT).show(); 
 
       } else { 
 
        Toast.makeText(getActivity().getApplicationContext(), "Something bad happened while removing item.", Toast.LENGTH_SHORT).show(); 
 
       } 
 
      } 
 
     }); 
 
    } 
 
}

编辑 如果有帮助,我的查询如下:

orderItemsByTime = db.getInstance().getReference().child("items").orderByChild("time"); 
+0

你试图删除'.getRef()'当你'addOnCompleteListener'? –

+0

做到了。不幸的是,没有工作。 –

回答

0

一个可能的解释是,ds.getRef().child(keyValue)没有指向你想要的位置。当在不存在的位置执行remove()时,这不是错误。 task.isSuccessful()返回true。

添加一些调试日志记录(或烘烤),以示对ds.getRef().child(keyValue)路径:

Toast.makeText(getActivity().getApplicationContext(), "Removing item at " + 
     ds.getRef().child(keyValue), Toast.LENGTH_SHORT).show(); 

Log.d(TAG, "Removing item at " + ds.getRef().child(keyValue)); 
+0

我在这里发布这个问题后,添加了您建议的敬酒。它显示我想要删除的特定路径。其他一些建议? –

+0

@LavitzBr:你确定路径正确吗?钥匙不会出现两次?那是你要的吗?例如:如果快照的路径是'/ test/post',则键是'post',而删除的路径是'/ test/post/post'。 –

+0

如果有帮助,我使用的查询是orderItemsByTime = db.getInstance()。getReference()。child(“items”)。orderByChild(“time”)。 Toast显示了我想要删除的项目的数据库密钥的路径;我在Firebase控制台中浏览数据库时看到的路径相同。 –