【发布时间】:2020-06-17 23:05:31
【问题描述】:
我正在学习 android 开发我正在使用 RXJava 和改造来与 API 交互。所以我已经成功地从我的 API 获取数据。现在的问题是程序在获取数据之前继续。如何等待从 API 下载数据然后运行某些函数?
我有一个如图所示的改造客户
public class RetrofitClient {
private static Retrofit retrofit = null;
private RetrofitClient() {
}
public static Retrofit getClient(String baseUrl) {
if (retrofit == null) {
retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(SimpleXmlConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
}
return retrofit;
}
}
我这样进行 API 调用。
public void getData(MyFragment Fragment) {
mAPIService.getData()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<Data>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
Log.i("ERROR IN GET DATA", e.toString());
}
@Override
public void onNext(Data response) {
Log.i("MY DATA", response.toString());
fragment.downloadData(response);
}
});
}
问题是我的 android 应用程序没有等待 fragment.downloadData(response) 完成,而是继续执行代码,然后因为响应为空而崩溃。
我在一个按钮上有一个监听器,当点击它时会从 API 获取数据
button.setOnClickListener(v ->{
APICaller.getData(this);
Log.i("TEST", data.ToString()); //THIS IS NULL
});
这是我从 APICaller 运行的 downloadData 函数
public void downloadData(Data data) {
this.data = data;
}
【问题讨论】: