在我的android应用程序中,我有一个屏幕,其中有3个需要微调的微调器 通过API调用填充。
static List<TripCode> tripCodeList = new ArrayList<>();
static List<Fleet> truckList = new ArrayList<>();
static List<Trailer> trailerList = new ArrayList<>();
除非我从所有3个不同的API调用中获得响应,否则我不想膨胀布局,所以这就是我正在做的
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = this;
if (MyApplication.isConnected()) {
getTripCodes();
} else {
Toast.makeText(this, "No internet Connection", Toast.LENGTH_LONG).show();
setContentView(R.layout.no_internet_connection);
}
}
基本上,我删除了setContentView(R.layout.activity_create_trip);
来自onCreate()
的电话,我打电话给getTripCodes()
这是getTripCodes()
public void getTripCodes() {
MyApplication.showProgressDialog(getString(R.string.please_wait), this);
IMyAPI iMyAPI = MyApplication.getIMyAPI();
Call<List<TripCode>> call = iMyAPI.getTripCodes();
call.enqueue(new Callback<List<TripCode>>() {
@Override
public void onResponse(Call<List<TripCode>> call, Response<List<TripCode>> response) {
if (response.isSuccessful() && response.body() != null) {
tripCodeList = response.body();
Log.d("test", "getTripCodes success = " + tripCodeList.size());
getTrucks();
} else {
MyApplication.dismissProgressDialog();
}
}
@Override
public void onFailure(Call<List<TripCode>> call, Throwable t) {
MyApplication.dismissProgressDialog();
}
});
}
因此,在调用成功后,我正在调用另一个也从API获取结果的函数getTrucks()
,在调用成功后,它将调用getTrailers()
但是我认为这是浪费时间,因为我可以同时并行调用这三个函数,然后检查所有列表是否都已填充。
但是我不知道该怎么做。如何检查所有通话是否成功?如果其中之一失败了,我怎么知道哪一个完全失败了?
答案 0 :(得分:0)
我相信您的问题,您可以轻松使用具有协程支持的Retrofit 2.6.0,并且可以将所有函数声明为已暂停函数,并使用async/launch
分派器分派它们,如果要在在某些情况下,请使用await()
等待结果。
并将RxJava / liveData用于响应式用户界面
您的示例代码如下
//maybe from Activity for ViewModel you can use ViewModelScope
GlobalScope.launch{
result1= async{ getTripCodes() }
result2= async{ getTrucks() }
result3= async{ getTrailers() }
doSomethingWithTripCodes(result1.await())
doSomethingWIthTrucks(result2.await())
doSomethingTrailers(result3.await())
}
参考: