Ser*_*are 5 java android firebase google-cloud-firestore
我需要有关 Firestore 查询的帮助。我有一个all_users数据收集,用户 ID 文档与每个用户信息。firestore 数据库映像我想检查用户名是否已存在。我了解如何获取()文档并进行比较,如其网页上所示,但是数据查询呢?这是我的代码
更新小部件 - (如果 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 {
}
}
Run Code Online (Sandbox Code Playgroud)
检查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();
}
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
我没有收到任何错误,结果也没有。我到处搜索过,但没有看到像我一样的问题。另外,我可以处理的问题并不多。任何更正将不胜感激,提前致谢。
更新:经过几天的搜索,我实际上在下面得到的答案的帮助下找到了一个解决方案。因此,由于 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() );
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
要解决此问题,请使用以下代码行:
FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference allUsersRef = rootRef.collection("all_users");
Query userNameQuery = allUsersRef.whereEqualTo("username", "userNameToCompare");
userNameQuery.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (DocumentSnapshot document : task.getResult()) {
if (document.exists()) {
String userName = document.getString("username");
Log.d(TAG, "username already exists");
} else {
Log.d(TAG, "username does not exists");
}
}
} else {
Log.d("TAG", "Error getting documents: ", task.getException());
}
}
});
Run Code Online (Sandbox Code Playgroud)
其中userNameToCompare是 String 类型,是要与之进行比较的用户的用户名。
| 归档时间: |
|
| 查看次数: |
5564 次 |
| 最近记录: |