在 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) {}
});
}
我已经在 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) {}
});
}