Firestore使用Collection查询时如何判断数据不存在并为EditText设错误提示
解决方案
你现在的逻辑缺失了「查询成功但无匹配数据」的判断分支:Firestore 只要请求本身执行成功,哪怕没有匹配到对应邀请码的文档,task.isSuccessful() 也会返回 true,不会走到异常分支,你需要在查询成功后优先判断返回结果是否为空,空值对应邀请码不存在的场景,直接设置错误提示即可。
修改后的代码示例:
CollectionReference reference = firestore.collection("Users"); reference.whereEqualTo("ReferCode", binding.refferalEd.getText().toString().toUpperCase()).get() .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() { @Override public void onComplete(@NonNull Task<QuerySnapshot> task) { if (task.isSuccessful()) { QuerySnapshot querySnapshot = task.getResult(); // 新增判断:查询结果为空,说明邀请码不存在 if (querySnapshot.isEmpty()) { dialog.dismiss(); // 给EditText设置错误提示 binding.refferalEd.setError("输入的邀请码不存在,请检查后重试"); // 可选:让EditText获取焦点,方便用户直接修改 binding.refferalEd.requestFocus(); return; } // 原有匹配到邀请码的逻辑 for (QueryDocumentSnapshot snapshot : querySnapshot) { String RefreeMobile = snapshot.getString("Mobile"); Log.e(TAG, "mobile: " + RefreeMobile); dialog.dismiss(); WriteBatch batch = firestore.batch(); // 此处省略部分业务代码 } } else { Log.e(TAG, "Error getting documents: ", task.getException()); dialog.dismiss(); // 可选:查询异常时也给用户对应提示 Toast.makeText(YourActivity.this, "验证邀请码失败,请检查网络后重试", Toast.LENGTH_SHORT).show(); } } });
内容的提问来源于stack exchange,提问作者gauravmandall
相关产品推荐
相关产品推荐

