如何在 Firebase 数据库中添加多个相同的 child
How to add several identical child in a Firebase database
我有一个手机游戏有多个系统来赚钱(交易或通过优惠墙)。
玩家可以在 3 种类型的“金币”包中进行选择,因此很明显,如果他们有足够的数量,他们可以多次请求相同的包。
但是我的代码有问题:
public void mediumPack(String emailMP) {
Date date = Calendar.getInstance().getTime();
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
Date previousDate = calendar.getTime();
String dateString = dateFormat.format(previousDate);
HashMap<String, Object> map = new HashMap<>();
map.put("amount", 5000);
map.put("email", emailMP);
map.put("date", dateString);
map.put("status", MPStatus);
DatabaseReference referenceMP = FirebaseDatabase.getInstance().getReference().child("demandMP").child(user.getUid());
referenceMP.child("Medium Pack")
.setValue(map)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Toast.makeText(MediumPackActivity.this, "Success", Toast.LENGTH_SHORT).show();
finish();
} else {
Toast.makeText(MediumPackActivity.this, "Error: " + task.getException().getMessage(), Toast.LENGTH_SHORT).show();
}
}
});
}
getMP.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String emailMP = emailMediumPack.getText().toString();
if (TextUtils.isEmpty(emailMP)) {
emailMediumPack.setError("Invalid put mail");
return;
}
mediumPack(emailMP);
}
});
所以child“demandMP”和uid已经在创建账户的时候创建了。
在我想添加 referenceMP 的 uid 中,一切正常,但问题是在尝试多次后可以创建单个引用(如果我使用另一个电子邮件地址,它只会修改“中包”中的电子邮件“
有没有办法创建多个引用?
否则,我想创建一个随机票而不是名称“Medium Pack”,考虑到这种可能性,有人可以告诉我如何创建一个看起来像这样的随机票:
MP-XX...(18 chars)-5000
如果你想在每次代码运行时在Medium Pack
下生成唯一的子节点,像这样调用push()
:
DatabaseReference referenceMP = FirebaseDatabase.getInstance().getReference().child("demandMP").child(user.getUid());
referenceMP.child("Medium Pack")
.push() //
.setValue(map)
...
每次您调用 push()
Firebase 都会生成一个新的唯一 ID,然后您可以使用它来设置值。
我有一个手机游戏有多个系统来赚钱(交易或通过优惠墙)。
玩家可以在 3 种类型的“金币”包中进行选择,因此很明显,如果他们有足够的数量,他们可以多次请求相同的包。
但是我的代码有问题:
public void mediumPack(String emailMP) {
Date date = Calendar.getInstance().getTime();
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
Date previousDate = calendar.getTime();
String dateString = dateFormat.format(previousDate);
HashMap<String, Object> map = new HashMap<>();
map.put("amount", 5000);
map.put("email", emailMP);
map.put("date", dateString);
map.put("status", MPStatus);
DatabaseReference referenceMP = FirebaseDatabase.getInstance().getReference().child("demandMP").child(user.getUid());
referenceMP.child("Medium Pack")
.setValue(map)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Toast.makeText(MediumPackActivity.this, "Success", Toast.LENGTH_SHORT).show();
finish();
} else {
Toast.makeText(MediumPackActivity.this, "Error: " + task.getException().getMessage(), Toast.LENGTH_SHORT).show();
}
}
});
}
getMP.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String emailMP = emailMediumPack.getText().toString();
if (TextUtils.isEmpty(emailMP)) {
emailMediumPack.setError("Invalid put mail");
return;
}
mediumPack(emailMP);
}
});
所以child“demandMP”和uid已经在创建账户的时候创建了。
在我想添加 referenceMP 的 uid 中,一切正常,但问题是在尝试多次后可以创建单个引用(如果我使用另一个电子邮件地址,它只会修改“中包”中的电子邮件“
有没有办法创建多个引用?
否则,我想创建一个随机票而不是名称“Medium Pack”,考虑到这种可能性,有人可以告诉我如何创建一个看起来像这样的随机票:
MP-XX...(18 chars)-5000
如果你想在每次代码运行时在Medium Pack
下生成唯一的子节点,像这样调用push()
:
DatabaseReference referenceMP = FirebaseDatabase.getInstance().getReference().child("demandMP").child(user.getUid());
referenceMP.child("Medium Pack")
.push() //
.setValue(map)
...
每次您调用 push()
Firebase 都会生成一个新的唯一 ID,然后您可以使用它来设置值。