如何让push()键生成我的Firebase?

时间:2018-03-29 03:00:24

标签: java android firebase firebase-realtime-database

enter image description here

从图片中我可以看到我有一个孩子FreezerItems,在那个孩子的下面我还有另外两个孩子,这些孩子是Firebase使用push()创建的randomKeys。我的问题是,我如何专门获取密钥L8i2M4wNUF5wOojaFE。另外,我如何将该密钥输入RecyclerViewAdapter。我试过这个:

holder.mDeleteBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mDatabase = FirebaseDatabase.getInstance().getReference().child("FreezerItems");
            String key = mDatabase.push().getKey();
            Toast.makeText(view.getContext(), key, Toast.LENGTH_SHORT).show();
        }
    });

但是所有曾经做过的就是用随机键显示Toast,每次点击按钮都会改变

2 个答案:

答案 0 :(得分:1)

您在代码中所做的是,每次单击项目时都会生成一个新ID。您没有使用存储在数据库中的那个。要使用已生成一次的id,您需要先存储它。因此,为了解决这个问题,我建议您将push()方法提供的随机生成的id存储为模型类的属性。您的数据库结构应如下所示:

Firebase-root
    |
    --- FreezerItems
            |
            --- L8i2M4wNUF5wOojaFE
                      |
                      --- date: "3/31/2018"
                      |
                      --- name: "Ice"
                      |
                      --- freezerItemId: "L8i2M4wNUF5wOojaFE"

然后要删除该特定项目,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference freezerItemsRef = rootRef.child("FreezerItems");
holder.mDeleteBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            freezerItemsRef.child(freezerItems.getId()).removeValue();
        }
    });

其中freezerItems是模型类的对象,getId()是一个返回该特定id的公共getter。

答案 1 :(得分:0)

事件对象应该包含id,当你读取数据时填充项目的id,就像这样做..

   for (DataSnapshot adSnapshot: dataSnapshot.getChildren()) {
        Event eobj = adSnapshot.getValue(Event.class);

                String key = dataSnapshot.getKey();
        eobj.setItemKey(key);
        mDataSet.add(eobj);
   }

使用项目的ID,您可以在单击按钮时将其删除。做这样的事......

FirebaseDatabase.getInstance().getReference()
                    .child("FreezerItems").child(product.getId).removeValue()
                    .addOnCompleteListener(new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {
                            if (task.isSuccessful()) {
                                //remove item from list and refresh recyclerview
                                mDataSet.remove(position);
                                notifyItemRemoved(position);
                                notifyItemRangeChanged(position, mDataSet.size());
                            } else {
                                Log.d("Delete Item", "couldn't be deleted");
                            }
                        }
                    });

完整示例,您可以看到http://www.zoftino.com/firebase-realtime-database-android-example