在我的Firestore数据库中,我有一个像这样的数据结构: 单元> 1-15单元>单词>单词文档
我想得到每个单元中的单词。 我想从x-1单元中完全检索到单词后再获得x单元中的单词
我考虑过要创建一种从特定单元获取单词并在完成后返回true的方法,因此在主程序中,我可以检查该方法是否返回true,可以从下一个单元获取单词。 / p>
我尝试使用onSuccessListener / onCompleteListener,但无济于事
我是这样说的:(很好)
String mainCollection = "Units";
String document = "Unit " + unitNumber;
String subCollection = "Words";
CollectionReference docRef = firebaseFirestore.collection(mainCollection)
.document(document).collection(subCollection);
docRef.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot queryDocumentSnapshot : task.getResult()) {
Word currentWord = queryDocumentSnapshot.toObject(Word.class);
wordsDatabase.wordDao().insertAWord(currentWord); //Inserts the words to Room database table
}
}
}
});
每个单词集合中的超过500个文档,因此可能会花费一些时间来建立较弱的Internet连接
答案 0 :(得分:0)
通常,您可以通过声明一个调用自身的函数来做到这一点:
int unitNumber = 1;
String mainCollection = "Units";
String document = "Unit " + unitNumber;
String subCollection = "Words";
getWordsFor(1);
public void getWordsFor(int unitNumber) {
CollectionReference docRef = firebaseFirestore.collection(mainCollection)
.document(document).collection(subCollection);
docRef.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot queryDocumentSnapshot : task.getResult()) {
Word currentWord = queryDocumentSnapshot.toObject(Word.class);
wordsDatabase.wordDao().insertAWord(currentWord); //Inserts the words to Room database table
}
// if there are more units to read, kick off the next one
if (unitNumber < 15) {
getWordsFor(unitNumber+1);
}
}
}
});
}
因此,我们以getWordsFor(1)
开始,然后在完成读取之后,该函数检查是否还有更多工作要做,如果是这种情况,则重新调用自身。