我已经尝试过在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)
答案 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) {}
});
}