【问题标题】:how to stop slash from splitting the firebase database child如何阻止斜杠拆分 firebase 数据库子项
【发布时间】:2023-02-09 12:30:59
【问题描述】:

我正在开发一个允许学生使用他们的注册号注册的应用程序。注册号就像 17/csc/001 直到无穷大。学生注册号将保存为该 firebase 参考的子项,但我遇到的问题是 firebase 将注册号拆分为三个位置,因为那里有斜杠。我需要有关如何解决它的帮助,因为没有斜线就没有学生的注册号。 我需要像这样的“注册号”,“17/csc/001”,但我有这个

"Registration Numbers": {
    "17": {
      "CSC": {
        "001": {
          "registrationNumber": "17/CSC/001"
        }
      }
    }
  }

void addRegistrationNumber(){
        progressBar.setVisibility(View.VISIBLE);
        String regNumber = editText.getText().toString();
        final DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
        databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                if (snapshot.child("Registration Numbers").child(regNumber).exists()){
                    progressBar.setVisibility(View.GONE);
                    showMessage("Error","You have Already Added this Registration Number");
                }else {
                    HashMap<String, Object> hashMap = new HashMap<>();
                    hashMap.put("registrationNumber",regNumber);
                    databaseReference.child("Registration Numbers").child(regNumber).updateChildren(hashMap)
                            .addOnCompleteListener(new OnCompleteListener<Void>() {
                                @Override
                                public void onComplete(@NonNull Task<Void> task) {
                                    if (task.isSuccessful()){
                                        progressBar.setVisibility(View.GONE);
                                        Toast.makeText(AdminAddOrRemoveARegistrationNumberActivity.this, "Registration Number Added Successfully", Toast.LENGTH_SHORT).show();
                                    }else {
                                        progressBar.setVisibility(View.GONE);
                                        Toast.makeText(AdminAddOrRemoveARegistrationNumberActivity.this, "Error Occurred, Please try Again", Toast.LENGTH_SHORT).show();
                                    }
                                }
                            });
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {
                progressBar.setVisibility(View.GONE);
                Toast.makeText(AdminAddOrRemoveARegistrationNumberActivity.this, "Database error "+error.toString(), Toast.LENGTH_SHORT).show();
            }
        });
    }

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    / 字符不允许出现在 Firebase 实时数据库的键中。所以你无法将它们包含在密钥中。

    您要做的是对学生注册号中的 / 值进行编码,该值不能出现在这些数字中,但允许出现在数据库键中。例如,如果 _ 不能出现在您的学生注册号中,那么您可以将 17/csc/001 编码为 17_csc_001

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-08
      • 1970-01-01
      相关资源
      最近更新 更多