Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在firebase android中保存一个父项下的多个子项_Java_Android_Firebase_Firebase Realtime Database_Shopping Cart - Fatal编程技术网

Java 在firebase android中保存一个父项下的多个子项

Java 在firebase android中保存一个父项下的多个子项,java,android,firebase,firebase-realtime-database,shopping-cart,Java,Android,Firebase,Firebase Realtime Database,Shopping Cart,我在onDataChange()方法中尝试了下面的代码来保存firebase存储中的项目单击,并且我正在尝试将项目添加到购物车中的单个用户下,该用户的购物车中可以有许多项目(作为子项)。 但问题是push()会在父id下生成新id,并执行无限循环,在单击项目时无限次保存项目。如果没有push(),购物车中的项目将替换为新项目。我想将这些项目作为子项添加到登录的同一用户下。我是firebase和android的新手,所以请在这里帮助我。 我还提供了保存在firebase中的数据的屏幕截图,当我单击

我在onDataChange()方法中尝试了下面的代码来保存firebase存储中的项目单击,并且我正在尝试将项目添加到购物车中的单个用户下,该用户的购物车中可以有许多项目(作为子项)。 但问题是push()会在父id下生成新id,并执行无限循环,在单击项目时无限次保存项目。如果没有push(),购物车中的项目将替换为新项目。我想将这些项目作为子项添加到登录的同一用户下。我是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) {}
    });
}

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

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

其次,在获得完成回调后调用NotifyAdapter。因此调用
cartRecyclerAdapter.notifyDataSetChanged()内部
onComplete()


添加活动或片段的完整代码。我相信您已经在引用中添加了ValueEventListener,然后您正在将新值推送到侦听器中。这将使它运行无限次。是的,谢谢,你是对的,我在addValueEventListener()中有这段代码现在请更正它,因为我已经更新了上面的代码。请添加您的数据库结构并记录您要添加到购物车中的项目。我已经将数据存储到firebase中,现在请帮助我这里的错误。@mark922请帮助我实现我的目标,因为我从上一个4月开始就一直在努力解决这个问题天。谢谢,您提供的更改对我起到了作用,通过添加push(),我正确地实现了每件物品的存储:)
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) {}
});
}