当前位置: 首页 > 知识库问答 >
问题:

firebase实时数据库的自动增量

卫英悟
2023-03-14

firebaseDatabase=firebaseDatabase.getInstandatabaseReference=firebaseDatabase.getReference()Query Query=databaseReference.child(“ticket_detail”).orderbychild(“ticket_no”).limittoLast(1);AddListenerForSingleValueEvent(new ValueEventListener(){@override public void onDataChange(@nonnull@notnull DataSnapshot snapshot){

                        if (snapshot.getValue()!=null){

                            String reslt = snapshot.getValue().toString();
                            String [] role = reslt.split(",");
                            String tiketno = role[4];

                            String [] ref = tiketno.split("HDTICKET",2);

                            int number = Integer.parseInt(ref[1])+1;                               


                            final String Tktno = "HDTICKET"+number;

                            HashMap<String,Object> hashMap = new  HashMap<>();
                            hashMap.put("TICKET_NO",Tktno);
                            hashMap.put("TICKET_DATE",ticketdt);
                            hashMap.put("UID",usrid);
                            hashMap.put("MESSAGE",msg);
                            hashMap.put("TICKET_STATUS",ticktstatus);
                            hashMap.put("DONE_BY",doneby);
                            hashMap.put("CLOSED_DATE",donedate);

                            databaseReference.child("TICKET_DETAIL")
                                    .child(Tktno)
                                    .setValue(hashMap)
                                    .addOnSuccessListener(new OnSuccessListener<Void>() {
                                        @Override
                                        public void onSuccess(Void unused) {
                                            //Toast.makeText(RaiseTicket.this, "Ticket Generated successfully", Toast.LENGTH_SHORT).show();
                                            RaiseTicket.this.finish();
                                            Intent sucess = new Intent(RaiseTicket.this, RaiseTicketsuccess.class);
                                            String user =  Tktno;
                                            sucess.putExtra("TICKET#",user);
                                            startActivity(sucess);
                                        }
                                    })
                                    .addOnFailureListener(new OnFailureListener() {
                                        @Override
                                        public void onFailure(@NonNull @NotNull Exception e) {
                                            Toast.makeText(RaiseTicket.this, ""+e.getMessage(), Toast.LENGTH_SHORT).show();
                                        }
                                    });
                        } else {

                            final String Tktno = "HDTICKET5000001";
                            HashMap<String,Object> hashMap = new  HashMap<>();
                            hashMap.put("TICKET_NO",Tktno);
                            hashMap.put("TICKET_DATE",ticketdt);
                            hashMap.put("UID",usrid);
                            hashMap.put("MESSAGE",msg);
                            hashMap.put("TICKET_STATUS",ticktstatus);
                            hashMap.put("DONE_BY",doneby);
                            hashMap.put("CLOSED_DATE",donedate);

                            databaseReference.child("TICKET_DETAIL")
                                    .child(Tktno)
                                    .setValue(hashMap)
                                    .addOnSuccessListener(new OnSuccessListener<Void>() {
                                        @Override
                                        public void onSuccess(Void unused) {
                                            //Toast.makeText(RaiseTicket.this, "Ticket Generated successfully", Toast.LENGTH_SHORT).show();
                                            RaiseTicket.this.finish();

                                            Intent sucess = new Intent(RaiseTicket.this, RaiseTicketsuccess.class);
                                            String user =  Tktno;
                                            sucess.putExtra("TICKET#",user);
                                            startActivity(sucess);
                                        }
                                    })
                                    .addOnFailureListener(new OnFailureListener() {
                                        @Override
                                        public void onFailure(@NonNull @NotNull Exception e) {
                                            Toast.makeText(RaiseTicket.this, ""+e.getMessage(), Toast.LENGTH_SHORT).show();
                                        }
                                    });
                        }
                    }
                    @Override
                    public void onCancelled(@NonNull @NotNull DatabaseError error) {

                    }
                });

共有1个答案

谷梁弘深
2023-03-14

没有对其进行构建的方法。也不要在列表中使用这些值作为键。如果您需要这样的增量数字,请为其构建自己的逻辑。最好的方法是使用云函数,并在列表中创建新元素时添加增量字段。

我可以在这里向您展示我们公司的一个例子,我们需要为您的物流任务增加数字,并在它们之前加上一个前缀。代码如下:

if (!eventSnapshot.child("cmr").exists()) {
  ////console.log(`No cmr in task!`)
  const lastCMRRef = admin.database().ref(`/cmr/${terminalUid}`);

  lastCMRRef
    .transaction((number) => {
      return (number || 0) + 1;
    })
    .then(({ committed, snapshot }) => {
      if (committed) {
        const cmr = snapshot.val();
        const formatedCMR = `${terminal.name}${`000000${cmr}`.slice(-6)}`;

        let update = { cmr: formatedCMR };

        return eventSnapshot.ref.update(update);
      }
    });
}

它在这里被减少了,只是为了增加。不要以为它是在云函数中运行的。这样,不管后端是什么,我们都自动化了流程。唯一的缺点是,它在创建和获得增量数字之间有一点滞后。

 类似资料:
  • 我需要firebase来存储任何模型的自动增量Id数据,我应该做什么?

  • 我使用Firebase实时数据库作为后端。我希望每个请求最多增加1个。例如: 这不管用。 在前端,我发送“数据1”。我应该如何创建“.validate”规则?

  • 我在一个Android应用程序中使用Firebase数据库,每次用户启动时,我都会在数据库中存储一些值,为此我会执行以下操作: 正如您在子方法中看到的,如果称为“usrId”,它将创建usrId目录,并在其中添加所有neccesary信息。但是我想为每个用户创建目录,所以我尝试传递usrId变量作为参数。但它不起作用。当我调试代码时,调试器说本地var usrId无法识别,我的问题是如何在Fire

  • 我目前正在做一个项目,该项目使用Arduino收集数据并将数据存储在云端,并将数据显示在移动应用程序的云端。从我尝试过的情况来看,Arduino只能将数据上传到Firebase实时数据库,但我的Flutter移动应用程序需要将数据存储在FiRest中。当实时数据库发生变化时,有没有办法将firebase实时数据库数据自动写入Fiback? 这是实时数据库结构:实时数据库结构 我想将数据附加到Fir

  • 我有一个数据库: 当用户()在应用程序中注册时,他会填充另一个用户uid(该用户uid具有属性)并将自己的uid添加到他的个人资料中(