在 firebase android 中将许多 child 保存在一个 parent 之下

Saving Many child under one parent in firebase android

我已经在 onDataChange() 方法中尝试了以下代码来将项目点击保存在 firebase 存储中,我正在尝试将项目添加到可以有很多项目的单个用户下的购物车中(如 child) 在它的购物车中。 但是这个问题是 push() 在 parent id 下生成新的 id 并进行无限循环并在 Item click.And 上无限次保存项目而没有 push() 项目购物车中的商品已更换为新商品。我想在登录的同一用户下将项目添加为 child。我是 ​​firebase 和 android 的新手,所以请在这里帮助我。 我还提供了保存在 firebase 中的数据的屏幕截图,当我单击一个项目时,它会无限次将该项目保存到 firebase 中。

 private void getDetailedItem(final String itemId)
{
    items.child(itemId);
    items.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot)
        {

            for(DataSnapshot datas: dataSnapshot.getChildren())
            {         

                if(pos.equals(datas.getKey().toString()))
                {
                    try {
                        item = dataSnapshot.getValue(Items.class);

                        cart_item_name = datas.child("title").getValue().toString();
                        cart_item_amount = datas.child("amount").getValue().toString();
                        image_view_cart = datas.child("image").getValue().toString();

                        Toast.makeText(CartActivity.this, "Data setting",
                                Toast.LENGTH_SHORT).show();
                        item.setTitle(cart_item_name);
                        item.setAmount(cart_item_amount);
                        item.setImage(image_view_cart);

                        Items uploadUser = new Items();
                        uploadUser.setTitle(cart_item_name);
                        uploadUser.setAmount(cart_item_amount);
                        uploadUser.setImage(image_view_cart);

                        if(mFirebaseAuth.getCurrentUser()!=null){
                           items.child("UserNode").child(mFirebaseAuth.getCurrentUser().getUid()).setValue(
                                            item, new DatabaseReference.CompletionListener() {
                                        @Override
                                        public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
                                            if (databaseError == null) {

                                                Toast.makeText(CartActivity.this, "Data is saved successfully",
                                                        Toast.LENGTH_SHORT).show();                                                    
                                            }
                                        }
                                    });
                        addToCartItems.add(item);
                        cartRecyclerAdapter.notifyDataSetChanged();
                    }
                    catch (Exception e)
                    {
                        e.printStackTrace();
                    }
                }
            }
            updateAdapterData();
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {}
    });
}

Click to see the ScreenShot

您的问题不清楚,但据我了解,您正在尝试制作一个购物车,登录用户可以在其中添加和删除商品并将其存储在 firebase 数据库中以备将来使用。

首先,如果您想获取特定项目的详细信息,请使用 addListenerForSingleValueEvent

其次,在获得完成回调后调用通知适配器。所以在 onComplete().

里面调用 cartRecyclerAdapter.notifyDataSetChanged();
private void getDetailedItem(final String itemId)
{
items.child(itemId);
items. addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot)
    {

        for(DataSnapshot datas: dataSnapshot.getChildren())
        {         

            if(pos.equals(datas.getKey().toString()))
            {
                try {
                    item = dataSnapshot.getValue(Items.class);

                    cart_item_name = datas.child("title").getValue().toString();
                    cart_item_amount = datas.child("amount").getValue().toString();
                    image_view_cart = datas.child("image").getValue().toString();

                    Toast.makeText(CartActivity.this, "Data setting",
                            Toast.LENGTH_SHORT).show();
                    item.setTitle(cart_item_name);
                    item.setAmount(cart_item_amount);
                    item.setImage(image_view_cart);

                    Items uploadUser = new Items();
                    uploadUser.setTitle(cart_item_name);
                    uploadUser.setAmount(cart_item_amount);
                    uploadUser.setImage(image_view_cart);

                    if(mFirebaseAuth.getCurrentUser()!=null){
                       items.child("UserNode").child(mFirebaseAuth.getCurrentUser().getUid()).setValue(
                                        item, new DatabaseReference.CompletionListener() {
                                    @Override
                                    public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
                                        if (databaseError == null) {
                                            addToCartItems.add(item);
                                    cartRecyclerAdapter.notifyDataSetChanged();

                                            Toast.makeText(CartActivity.this, "Data is saved successfully",
                                                    Toast.LENGTH_SHORT).show();                                                    
                                        }
                                    }
                                });

                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            }
        }
        updateAdapterData();
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {}
});
}