【问题标题】:How to add several identical child in a Firebase database如何在 Firebase 数据库中添加几个相同的孩子
【发布时间】:2021-12-11 08:29:22
【问题描述】:

我有一个手机游戏,有几个系统来赚钱(交易或通过优惠墙)。

玩家可以在 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);
        }
});

所以在创建帐户时已经创建了子“demandMP”和uid。

在uid中我想添加referenceMP,一切正常,但问题是多次尝试后可以创建一个引用(如果我使用另一个电子邮件地址,它只会修改“Medium Pack”中的电子邮件

有没有办法创建多个引用?

否则,我想创建一个随机票而不是名称“Medium Pack”,考虑到这种可能性,有人可以告诉我如何创建一个如下所示的随机票:

MP-XX...(18 chars)-5000

【问题讨论】:

    标签: java android firebase android-studio firebase-realtime-database


    【解决方案1】:

    如果您想在每次代码运行时在Medium Pack 下生成唯一的子节点,请像这样调用push()

    DatabaseReference referenceMP = FirebaseDatabase.getInstance().getReference().child("demandMP").child(user.getUid());
    
    referenceMP.child("Medium Pack")
        .push() // ?
        .setValue(map)
        ...
    

    每次您调用push()时,Firebase 都会生成一个新的唯一 ID,然后您可以使用它来设置值。

    【讨论】:

    • 非常感谢它运行良好!我还有一个简单的问题,我不能创建一个只有 Uid 的孩子,我必须添加其他内容,例如电子邮件,这正常吗?
    • FirebaseDatabase.getInstance().getReference().child("Withdraw") .child(user.getUid()) // 这不起作用,例如,我必须添加例如电子邮件和一个 setValue
    • 必须始终有一个值,但应该可以只设置一个简单的值,例如referenceMP.child("Medium Pack").push().setValue("test")。如果您在完成这项工作时遇到困难,我建议您使用自己的MCVE 发布一个新问题。
    猜你喜欢
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 2021-05-28
    • 2021-08-23
    • 2023-03-05
    相关资源
    最近更新 更多