我想從 FireCloud 中檢索檔案。我想在檢索所有檔案后執行排序。我發現有時它無法正確排序,因為 android 沒有等到 Firebase 對所有檔案進行排序。有什么方法可以確保 Firestore 檢索到所有檔案?
如果無論如何都沒有確保 Firestore 檢索了所有檔案。我可以使用 or 方法將兩個查詢合并為一個并執行搜索嗎?嗨,我想從 FireCloud 中檢索檔案。我想在檢索所有檔案后執行排序。我發現有時由于android沒有等到firebase對所有檔案進行排序而無法正確排序。有什么方法可以確保 firecloud 檢索到所有檔案。
如果無論如何都沒有確保 firecloud 檢索到所有檔案。我可以使用 or 方法將兩個查詢合并為一個并執行搜索嗎?
CollectionReference doc = firebaseFirestore.collection("TransferRecord");
Query query = doc.whereEqualTo("fromStudentID", StudentID)
.whereGreaterThanOrEqualTo("timeStamp", previousDate)
.whereLessThan("timeStamp", currentDate)
.orderBy("timeStamp", Query.Direction.DESCENDING);
query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (DocumentSnapshot documentSnapshotA : task.getResult()) {
list = documentSnapshotA.toObject(TransferRecordClass.class);
transferrecordlist.add(list);
}
} else {
}
}
});
CollectionReference doc2 = firebaseFirestore.collection("TransferRecord");
Query query2 = doc2.whereEqualTo("toStudentID", StudentID)
.whereGreaterThanOrEqualTo("timeStamp", previousDate)
.whereLessThan("timeStamp", currentDate)
.orderBy("timeStamp", Query.Direction.DESCENDING);
query2.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (DocumentSnapshot documentSnapshot : task.getResult()) {
list = documentSnapshot.toObject(TransferRecordClass.class);
transferrecordlist.add(list);
}
if (transferrecordlist.isEmpty()) {
Toast.makeText(TransferRecordActivity.this, "Empty", Toast.LENGTH_SHORT).show();
ImageNoFound.setVisibility(View.VISIBLE);
recyclerView.setVisibility(View.GONE);
} else {
ImageNoFound.setVisibility(View.GONE);
recyclerView.setVisibility(View.VISIBLE);
Collections.sort(transferrecordlist, new Comparator<TransferRecordClass>() {
@Override
public int compare(TransferRecordClass transferRecordClass1, TransferRecordClass transferRecordClass2) {
return transferRecordClass2.getTimeStamp().compareTo(transferRecordClass1.getTimeStamp());
}
});
mytransferrecordadapter = new TransferRecordAdapter(transferrecordlist, TransferRecordActivity.this, StudentID);
recyclerView.setAdapter(mytransferrecordadapter);
}
} else {
}
}
});
uj5u.com熱心網友回復:
如果您想執行兩個單獨的查詢并稍后使用組合結果,那么我建議您使用Tasks#whenAllSuccess(Task...<?> tasks)方法。所以在代碼中,它應該是這樣的:
CollectionReference doc = firebaseFirestore.collection("TransferRecord");
Query query = doc.whereEqualTo("fromStudentID", StudentID)
.whereGreaterThanOrEqualTo("timeStamp", previousDate)
.whereLessThan("timeStamp", currentDate)
.orderBy("timeStamp", Query.Direction.DESCENDING);
CollectionReference doc2 = firebaseFirestore.collection("TransferRecord");
Query query2 = doc2.whereEqualTo("toStudentID", StudentID)
.whereGreaterThanOrEqualTo("timeStamp", previousDate)
.whereLessThan("timeStamp", currentDate)
.orderBy("timeStamp", Query.Direction.DESCENDING);
Task firstTask = query.get();
Task secondTask = doc2.get();
Task combinedTask = Tasks.whenAllSuccess(firstTask, secondTask).addOnSuccessListener(new OnSuccessListener<List<Object>>() {
@Override
public void onSuccess(List<Object> list) {
//Do what you need to do with your list of objects.
}
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/488070.html
