gpt4 book ai didi

java - Android ComputableFuture 无法与 Firestore 配合使用

转载 作者:行者123 更新时间:2023-12-01 18:05:41 25 4
gpt4 key购买 nike

我正在尝试在 Android 中将 CompletableFuturesFirestore 结合使用。我已经利用 CompletableFutures 设置了一个函数,如下所示:

CompletableFuture<List<Park>> loadAllParks(){
final CompletableFuture<List<Park>> future = new CompletableFuture<>();
db.collection("parks")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
List<Park> results = new ArrayList<>();
for (QueryDocumentSnapshot document : Objects.requireNonNull(task.getResult())) {
Log.d("SUCCESS", document.getId() + " => " + document.getData());
Park documentObj = document.toObject(Park.class);
results.add(documentObj);
}
future.complete(results);
} else {
Log.d("ERROR", "Error getting documents: ", task.getException());
future.completeExceptionally(new CustomExceptions("Firebase Error"));
}
}
});
return future;
}

该函数的调用方式如下:

try {
allParks = loadAllParks().get();
for (Park park: allParks) {
Log.d("DEBUG", park.getName());
}
} catch (ExecutionException | InterruptedException e) {
e.printStackTrace();
Toast.makeText(MainActivity.this, "An error has occurred while retrieving the parks.",
Toast.LENGTH_SHORT).show();
}

但是,这会导致错误:

W/Firestore: (21.4.1) [OnlineStateTracker]: Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds

This typically indicates that your device does not have a healthy Internet connection at the moment. The client will > operate in offline mode until it is able to successfully connect to the backend.

因此,我在没有 CompletableFuture 函数的情况下按以下方式进行了尝试,并且能够使用以下代码获得所需的输出:

FirebaseFirestore db = FirebaseFirestore.getInstance();
db.collection("parks")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
List<Park> results = new ArrayList<>();
for (QueryDocumentSnapshot document : Objects.requireNonNull(task.getResult())) {
Log.d("SUCCESS", document.getId() + " => " + document.getData());
Park documentObj = document.toObject(Park.class);
results.add(documentObj);
}
for (Park park: results) {
Log.d("DEBUG", park.getName());
}
} else {
Log.d("ERROR", "Error getting documents: ", task.getException());
}
}
});

因此,对我来说很明显,由于某种原因,CompletableFuture 未完成,并且它以某种方式导致 Firestore 调用无法通过(并且因此无法连接到 Firestore)。如果有任何关于为什么会出现这种情况的建议,我将不胜感激!

最佳答案

由于某种原因,我改用了.getNow()而不是.get(),结果成功获取。不知道为什么,因为来自 docs似乎唯一的区别是使用 .getNow() 您可以提供默认结果。欢迎任何解释!

关于java - Android ComputableFuture 无法与 Firestore 配合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60563342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com