我有ServerTime类:
public class ServerTime {
private String time;
public ServerTime(String time) {
this.time = time;
}
public String getTime() {
return time;
}
}
和ServerNetwork类:
public class ServerNetwork {
private String id;
private String name;
public ServerNetwork(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public String getName(){
return name;
}
}
现在,我要按顺序处理此操作,因为我必须为第二个api调用提供时间戳。到目前为止,我已经有了这个,但是我不确定如何处理第一个可观察到的结果,例如将其转换为时间戳,然后将其用于第二个可观察到的api请求。
Observable<ServerNetwork> serverNetworkObservable = apiInterface
.getTime()
.flatMap(time -> apiInterface.getNetworks(time, anothervalue))
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
如何启动这些可观察对象以实际调用api?我是RxJava的新手。
答案 0 :(得分:0)
尝试:
apiInterface.getTime()
// specify thread for performing network call.
.subscribeOn(Schedulers.newThread())
// use emissions from 1st Observable in 2nd Observable.
.flatMap(serverTime -> {
String anotherValue = "";
return apiInterface.getNetworks(serverTime.getTime(), anotherValue);
})
// switch to computation thread to transform emissions (optional)
.observeOn(Schedulers.computation())
// transform emissions from Observable<ServerNetwork> to Observable<String> (corresponding network ids).
.map(ServerNetwork::getId)
// switch to UI thread to consume the transformed emissions.
.observeOn(AndroidSchedulers.mainThread());
.subscribe(serverNetworkId -> {
// update views, etc
textView.setText(serverNetworkId);
});
这是推断的接口:
public interface ApiInterface {
@(...)
Observable<ServerTime> getTime();
@(...)
Observable<ServerNetwork> getNetworks(@Body String timeStamp, @Body String anotherValue);
}
注意:由于您未包含ApiInterface.class
文件的代码,因此我试图推断该文件可能包含的内容。我还提供了一些注释,以解释内幕发生了什么,以增加一些清晰度。我包括一个可选的运算符.map()
,并使用了多个observeOn
,它们是完全可选的。