【问题标题】:How to delete selected item from Firebase database?如何从 Firebase 数据库中删除所选项目?
【发布时间】:2017-11-22 11:32:57
【问题描述】:

我是使用 Android 应用程序的 Firebase 初学者,我成功显示了 ListView 的地点,现在我想在单击项目时删除一个地点。

这是我的尝试:

listPlace.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
    @Override
    public boolean onItemLongClick(AdapterView<?> parent, final View view,final int position, long id) {

     final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(EndroitActivity.this);
        dialogBuilder.setTitle("Delete!");
        dialogBuilder.setPositiveButton("Yes...", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Place p = list.get(position);
                System.out.println(p.getNomPlace());

                DatabaseReference dR = FirebaseDatabase.getInstance().getReference("place").child(p.getNomPlace());
                dR.removeValue();
            }
        }).setNegativeButton("No", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(getApplicationContext(), "Fine, ya coward."
                                , Toast.LENGTH_SHORT).show();
                    }
                });

        dialogBuilder.create().show();

        return true;
    }
});

【问题讨论】:

  • 能否分享一下你的数据库结构。
  • 我更新了我的问题
  • 您是否只删除了nomPlace 字段?
  • @MehulKabaria,不,我要删除洞孩子
  • 检查我的答案。

标签: android listview firebase firebase-realtime-database


【解决方案1】:

如果你想删除整个节点,你必须像下面这样......

DatabaseReference dR = FirebaseDatabase.getInstance().getReference("place").child("autoKey");
                dR.removeValue();
dR. removeValue();

您必须将p.getNomPlace() 替换为您的autoKey。它将从特定的autoKey 中删除整个节点。 getUid() 可以提供自动密钥。

【讨论】:

  • 谢谢你的回复,所以,我应该把.child("autoKey")换成.child(getUid())
【解决方案2】:
 DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
Query applesQuery = ref.child("place").orderByChild("nomPlace").equalTo(p.getNomPlace());
applesQuery.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    for (DataSnapshot appleSnapshot: dataSnapshot.getChildren()) {
        appleSnapshot.getRef().removeValue();
    }
}

@Override
public void onCancelled(DatabaseError databaseError) {
    Log.e(TAG, "onCancelled", databaseError.toException());
}
});

【讨论】:

    【解决方案3】:

    要从 Firebase 数据库中删除记录,您只需在引用上直接使用 removeValue() 方法即可。您根本不需要用作侦听器。所以要删除一个特定的地方,请使用以下代码:

    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    rootRef.child("place").child(placeId).removeValue();
    

    其中placeId 是您要删除的特定地点的ID。请注意,placeIdgetUid() 或用户 ID 不同。要获取该 ID,您需要在使用 push() 方法生成唯一密钥时使用 getKey() 方法,如下所示:

    String placeId = rootRef.child("place").push().getKey();
    

    拥有这个placeId,您可以在任何DatabaseReference 中使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-30
      • 1970-01-01
      • 1970-01-01
      • 2020-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多