在Firebase Android中将一个父母下的许多孩子保存下来

时间:2018-07-22 03:46:29

标签: java android firebase firebase-realtime-database shopping-cart

我已经尝试过在onDataChange()方法中使用以下代码来将项目单击保存在Firebase存储中,并且尝试将项目添加到可以在其购物车中包含许多项目(作为子项)的单个用户下的购物车中。 但是问题是push()会在父ID下生成新的ID,并进行无限循环,并在单击Item时无限次保存该项目。如果没有push(),则购物车中的项目将替换为新的那一个。我想将这些项目添加为同一登录用户的孩子。我是firebase和android的新手,所以请在这里帮助我。 我还提供了保存在Firebase中的数据的屏幕截图,当我单击一项时,它将无限次保存该项目到Firebase中。

class Tree:
  def __init__(self, _val, _r, _d):
    self.v, self.right, self.left = _val, None, None
    if _r:
       l, r = _r
       self.left, self.right = Tree(l, _d.get(l, []), _d), Tree(r, _d.get(r, []), _d)
t = Tree(1, d[1], d)

Click to see the ScreenShot

1 个答案:

答案 0 :(得分:0)

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

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

第二,获得完成回调后,调用通知适配器。因此,请在cartRecyclerAdapter.notifyDataSetChanged();内致电onComplete()

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) {}
});
}