这是我想要获取数据并知道数据是否存在的代码。
问题是,如果数据存在,它运行{ if(task.isSuccessful() }
,但如果数据不存在,它什么都不做!
我怎么知道数据不存在?我添加了其他{ else }
语句,但它没有用。
CollectionReference reference = firestore.collection("Carts").document(FirebaseAuth.getInstance().getCurrentUser().getUid())
.collection("Carts");
reference.whereEqualTo("ordered",false).get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
if(document.exists()){
Toast.makeText(ListProducts.this, "Exists", Toast.LENGTH_SHORT).show();
}
else {
// This part is not running even if there is no data
Toast.makeText(ListProducts.this, "NOPE", Toast.LENGTH_SHORT).show();
}
}
}
}
});
答案 0 :(得分:2)
您需要直接在exists()
对象上使用QueryDocumentSnapshot
方法,如下所示:
CollectionReference reference = firestore.collection("Carts").document(FirebaseAuth.getInstance().getCurrentUser().getUid())
.collection("Carts");
reference.whereEqualTo("ordered",false).get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
if (document.exists()) {
Toast.makeText(ListProducts.this, document.toString(), Toast.LENGTH_SHORT).show();
}
}
} else{
//This Toast will be displayed only when you'll have an error while getting documents.
Toast.makeText(ListProducts.this, task.getException().toString(), Toast.LENGTH_SHORT).show();
}
}
});
task.isSuccessful()
用于处理侦听器成功或失败,exists()方法调用QueryDocumentSnapshot类的对象时扩展DocumentSnapshot类返回:
如果文档存在于此快照中,则为true。
答案 1 :(得分:0)
通过isEmpty()或size()方法成功完成任务后检查文档是否存在
if (task.isSuccessful()) {
if(task.getResult().isEmpty()){
//There is no such document do what ever you want!
}
else {
for (QueryDocumentSnapshot document : task.getResult()) {
if (document.exists()) {
Toast.makeText(ListProducts.this, document.toString(), Toast.LENGTH_SHORT).show();
}
}
}
}
或
if(task.getResult().size > 0){
//Document exist
}
答案 2 :(得分:0)
我知道我来晚了一点,不知道您是否找到答案。但是我刚刚发现了如何做:
reference.whereEqualTo("ordered",false).get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
if (queryDocumentSnapshots.isEmpty()) {
Snackbar.make(mainContactsLayout, "No matches found", Snackbar.LENGTH_SHORT).show();
} else {
for (DocumentSnapshot documentSnapshot : queryDocumentSnapshots.getDocuments()) {
Snackbar.make(mainContactsLayout, documentSnapshot.getId(), Snackbar.LENGTH_SHORT).show();
}
}
}
});
答案 3 :(得分:0)
您需要验证文档列表是否为空
FirebaseFirestore.getInstance().collection(collectionName).whereEqualTo(cle
, valeur)
.get()
.addOnCompleteListener(task -> {
if (task.isSuccessful()) {
QuerySnapshot querySnapshot = task.getResult();
if (querySnapshot.isEmpty()) { // no documents found
// Type your code yere
} else {
for (QueryDocumentSnapshot document : querySnapshot){
}
}
} else {
Log.d(TAG, methodName + task.getException());
}
});
如果我执行
for (int i = 2; i < 1; i ++) { }
没关系,但是我们永远也不会进入这个循环。上面的代码是一样的