gpt4 book ai didi

java - Android 中的多个异步调用最佳实践

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

对于示例 1,我需要一个更短、更清晰的解决方案。因此,在某个 Activity/Fragment 可以启动之前,需要完成多个异步调用。示例 1 对于成员 boolean 值来说非常困惑和难看,但是可以工作。

我正在考虑使用 Google Tasks API。但为此,我需要添加 google-services.json 并连接到“Google Sign-in”、“Analytics”或“Cloud Messaging”,我认为我不需要。一定有更好的方法或者这是正确的方法吗?

示例 1:

boolean mIsFirstDone = false;
boolean mIsSecondDone = false;
boolean mAlreadyDone = false;

private void prepareSomeData() {
dataManager.requestSomeContent(new ApiCallback() {
@Override
public void onSuccess(final Object object) {
mIsFirstDone = true;

if(mIsFirstDone && mIsSecondDone && !mAlreadyDone) {
mAlreadyDone = true;
doSomething();
}
}
});
}

private void prepareSomeSettings() {
dataManager.requestSomeSettings(new ApiCallback() {
@Override
public void onSuccess(final Object object) {
mIsSecondDone = true;

if(mIsFirstDone && mIsSecondDone && !mAlreadyDone) {
mAlreadyDone = true;
doSomething();
}
}
});
}

使用任务 API:

 Tasks.whenAll(SomeDataTask, SomeSettingsTask).addOnSuccessListener(executor, new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void v) {
doSomething();
}
}).addOnFailureListener(executor, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
}
});

最佳答案

正如所指出的,RxJava 可能是一个更好的解决方案。原因是因为您可以将多个 api 请求、数据库请求链接到一个看起来优雅且干净的具体代码块中。作为示例,请参阅下面我想说的内容:

Subscription subscription = apiService.getUser(someId)
.flatMap(user -> apiService.getFavourites(user.getFavouritesTag())
.subscribe(favourites -> view.updateFavouritesList(favourites),
throwable -> Log.e(TAG, throwable.printStackTrace());

关于java - Android 中的多个异步调用最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43910368/

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