java - Firestore 查询 - 检查用户名是否已存在

标签 java android firebase google-cloud-firestore

我需要有关 Firestore 查询的帮助。我有一个 all_users 数据集合,包含每个用户信息的用户 ID 文档。 firestore database image我想检查用户名是否已经存在。我得到了如何获取()文档并按照他们的网页上的演示进行比较但是数据查询呢?这是我的代码

更新小部件 - (如果 mUser 文本字段和当前用户名不同)

 private void saveProfileSettings(){
    final String username = mUsername.getText().toString();
    //Case 1: user did not change their username
    if (!mUsers.getUsername().equals(username)){

        checkingIfusernameExist(username);

    }else {

    }
}

检查 IfusernameExist 方法

    private void checkingIfusernameExist(final String username){
    Log.d(TAG, "checkingIfusernameExist: Checking if " + username + " Exists");

    Query mQuery = mFirebaseFirestore.collection("all_users")
            .orderBy(getString(R.string.fields_username))
            .whereEqualTo("username", username);

    mQuery.addSnapshotListener(new EventListener<QuerySnapshot>() {
        @Override
        public void onEvent(QuerySnapshot documentSnapshots, FirebaseFirestoreException e) {

            if (documentSnapshots != null){
                Log.d(TAG, "onEvent: username does not exists");
                Toast.makeText(getActivity(), "Username is available", Toast.LENGTH_SHORT).show();
            }
            for (DocumentSnapshot ds: documentSnapshots){
                if (ds.exists()){
                    Log.d(TAG, "checkingIfusernameExist: FOUND A MATCH: " + ds.toObject(Users.class).getUsername());
                    Toast.makeText(getActivity(), "That username already exists.", Toast.LENGTH_SHORT).show();
                }
            }
        }
    });
 }

我没有收到任何错误,结果也没有。我到处搜索,但没有看到我的问题。另外,我可以处理的问题不多。任何更正将不胜感激,提前致谢。

更新:经过几天的搜索,我实际上在下面得到的答案的帮助下想出了一个解决方案。因此,由于 firestore 没有操作逻辑,如果 .whereEqualTo 中不存在用户名,您想要更新,请使用该任务查找包含任何有效载荷。

对我有用的代码

检查 IfUsernameExists 方法

private void checkingIfusernameExist(final String usernameToCompare){

    //----------------------------------------------------------------
    final Query mQuery = mFirebaseFirestore.collection("all_users").whereEqualTo("username", usernameToCompare);
    mQuery.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
        @Override
        public void onComplete(@NonNull Task<QuerySnapshot> task) {
            Log.d(TAG, "checkingIfusernameExist: checking if username exists");

            if (task.isSuccessful()){
                for (DocumentSnapshot ds: task.getResult()){
                    String userNames = ds.getString("username");
                        if (userNames.equals(usernameToCompare)) {
                            Log.d(TAG, "checkingIfusernameExist: FOUND A MATCH -username already exists");
                            Toast.makeText(getActivity(), "username already exists", Toast.LENGTH_SHORT).show();
                        }
                }
            }
            //checking if task contains any payload. if no, then update
            if (task.getResult().size() == 0){
                try{

                Log.d(TAG, "onComplete: MATCH NOT FOUND - username is available");
                Toast.makeText(getActivity(), "username changed", Toast.LENGTH_SHORT).show();
                //Updating new username............


                }catch (NullPointerException e){
                    Log.e(TAG, "NullPointerException: " + e.getMessage() );
                }
            }
        }
    });

最佳答案

以下查询返回所有具有提供的 usernameToCheck 的用户。如果用户名是唯一的,那么您只会得到一个文档快照。

    Query mQuery = mFirebaseFirestore.collection("all_users")
                .whereEqualTo("username", "usernameToCheck");

      mQuery.addSnapshotListener(new EventListener<QuerySnapshot>() {
            @Override
            public void onEvent(QuerySnapshot documentSnapshots, FirebaseFirestoreException e) {

                for (DocumentSnapshot ds: documentSnapshots){
                    if (ds!=null){
               String userName = document.getString("username");
                        Log.d(TAG, "checkingIfusernameExist: FOUND A MATCH: " +userName );
                        Toast.makeText(getActivity(), "That username already exists.", Toast.LENGTH_SHORT).show();
                    }
                }
            }
        });

关于java - Firestore 查询 - 检查用户名是否已存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48570270/

相关文章:

firebase - Flutter:如何将 Firebase 云消息传递与 ChatApp 集成

javascript - 带有 Firebase 的 Angularjs 无法发送数据

java - 以法语导出 CSV 显示垃圾字符

用于数据库操作的 Java 框架

android - 如何将此 rxjava/rxkotlin flatMap 转换为 lambda 表达式?

Android Auto - 如何显式打开谷歌地图进行导航以显示在汽车屏幕上(intent.setPackage 不起作用)

java - getClassLoader().getResource() 抛出 NullPointerException?为什么不是 FileNotFoundException?

java - 为什么在 Android 后使用异步 HTTP

android - Cardview - 为每个元素设置不同的背景颜色

ios - 从 firebase 检索子值到数组以在 TableView 单元格中使用