当前位置: 首页 > 面试题库 >

如何检查Firebase数据库中是否已经存在用户名?

鱼志学
2023-03-14
问题内容

无法让Firebase识别已经输入的用户名。下面的代码显示我正在尝试将输入的用户名与数据库的DataSnapshot进行比较。该代码似乎没有拾取输入的用户名。代码是否错误?

private boolean mSwitch = false;

public void checkInfo(View view){

    checkUsernameIsUnique();
    checkInformation();

    if(mSwitch) {
        Intent intent = new Intent(getApplicationContext(), MenuActivity.class);
        saveUserInformation();
        startActivity(intent);
    }
}
public void checkUsernameIsUnique(){

    String username = Username.getText().toString().trim();

    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference usernameRef = rootRef.child("user_profile_info").child(userID);
    Query checkName = usernameRef.equalTo(username);
    checkName.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            String name = Username.getText().toString().trim();
            for (DataSnapshot ds : dataSnapshot.getChildren()) {
                if(name.equals(ds.child("username").getValue(String.class))){

                    Username.setError("Username Taken");
                    Username.requestFocus();

                } else {
                    Toast.makeText(ProfileActivity.this, "Registered User", Toast.LENGTH_SHORT).show();
                    mSwitch = true;
                }
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

    if(Username.getText().toString().equals("")){

        Username.setError("A Username is Required");
        Username.requestFocus();

    }

    if(Username.length() < 5){

        Username.setError("Username must be 5 characters minimum");
        Username.requestFocus();

    }
}

在按钮上单击,我希望能够将用户引导到该错误,并且在该错误唯一之前,不应将该页面推送到下一个活动。

JSON树(如果有帮助)

"user_profile_info" : {
    "8FUV95JorVT26Gd1QFNUbxEf8O93" : {
      "date_of_birth" : "2/5/1925",
      "diet" : "Moderate",
      "drinker" : "No",
      "education" : "Masters Degree",
      "exercise" : "3 - 5 Hours a Week",
      "forename" : "Ben",
      "gender" : "Male",
      "have_alzheimers" : "No",
      "have_diabetes" : "No",
      "have_parkinsons" : "No",
      "history_alzheimers" : "No",
      "history_diabetes" : "No",
      "history_parkinsons" : "No",
      "marital_status" : "Single",
      "smoker" : "No",
      "surname" : "Dover",
      "username" : "Maturity101"
    }

问题答案:

addListenerForSingleValueEvent是异步操作。onDataChange()设置回调后,代码将继续运行,而您尚未获取任何用户名。到您检查mSwitch值时,即使用户名确定,它也始终为false。

要使其正常工作,您应该移动

checkInformation();
if(mSwitch) {
    Intent intent = new Intent(getApplicationContext(), MenuActivity.class);
    saveUserInformation();
    startActivity(intent);
}

onDataChange()回调的末尾。

此外,最好在查询文档之前先检查空字符串和长度。只是为了减少从数据库下载的无用数据。

但是由于for循环,它似乎仍然无法正常工作。像这样尝试:

mSwitch = true; // as its OK
for (DataSnapshot ds : dataSnapshot.getChildren()) {
  if(name.equals(ds.child("username").getValue(String.class))){
    mSwitch = false;
    Username.setError("Username Taken");
    Username.requestFocus();
    break;
  }
}

...
if (mSwitch) startActivity();
else showErrorToast();


 类似资料:
  • 问题内容: 我正在尝试检查用户名是否存在。当我打电话时,快照值始终可用,但是它将打印我的整个数据库,而不仅仅是我请求的数据。当我打电话时,它总是返回null。我尝试了很多方法来解决。 这是我的代码: 这是我的json树: 这是安全规则: 问题答案: 修改 JSON 树以包含一个单独的节点,即在您创建新用户时添加每个用户的用户名,在用户修改其用户名时进行修改… 要检查您的用户名是否已经存在: 通过操

  • 我想检查一下总线号码是否已经存在于Firebase的数据库中。 这是我的示例代码。我一直在搜索过去的日子,但我不能找到正确的代码这样做。 有人能帮我处理这件事吗?提前道谢。不管if语句是否正确,我的问题还在于为什么...不起作用?我试图测试一些吐司消息,但消息不会弹出。

  • 问题内容: 我正在将实时数据库与Google的Firebase结合使用,并且正在尝试检查是否存在孩子。 我的数据库结构如下 我想检查room1是否存在。我尝试了以下方法: 在访问它时,返回该房间属性的JSON,但是我如何检查room()是否从那里开始呢? 评论是否需要任何澄清 问题答案:

  • 问题内容: 我是通过Android(Java)刚接触Firebase的,并且想知道如何检查用户是否已存在以下格式的数据库中: 例如,按下按钮后,我想检查Firebase以查看用户名“ Michael”是否存在(对象michael中的第一级michael-而不是“ michael”。 谢谢 问题答案: 使用方法或onDataChange中的SingleValueEvent

  • 我目前正在安装Firebase应用程序,并能够检索使用该应用程序的所有用户的列表。当用户首次注册该应用程序时,他们需要确认自己的电话号码,就像现在大多数iOS应用程序一样。我正在“用户”节点中存储他们的电话号码。我的问题是如何在Firebase中查询以查看该电话号码是否存在于我的数据库中?基本上,我想根据我生成的电话号码列表和所有联系人列表进行查询 这将允许我显示特定联系人当前是否正在使用该应用程

  • 问题内容: 我正在使用以下对我不起作用的代码。 无法在 C:\ xampp \ htdocs \ Exp \ welcome.php 中将mysqli_result类的对象转换为int 问题答案: 该代码对您来说很好…