接下来把Rxjava在实际的项目中使用,并结合Retrofit网络库,源码参考个人作品【图灵机器人】
看一张示例Demo图
turing_1.pngDemo下载地址
仅使用Retrofit请求图灵API接口,获得问答信息
private void requestApiByRetrofit(String info) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(TulingParams.TULING_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
RetrofitApi api = retrofit.create(RetrofitApi.class);
Call<MessageEntity> call = api.getTuringInfo(TulingParams.TULING_KEY, info);
call.enqueue(new Callback<MessageEntity>() {
@Override
public void onResponse(Call<MessageEntity> call, Response<MessageEntity> response) {
handleResponseMessage(response.body());
}
@Override
public void onFailure(Call<MessageEntity> call, Throwable t) {
}
});
}
Retrofit是Square公司提供的一个类型安全的Http Client,由于Retrofit本身是支持RxJava的,因此这两者理所当然搭配使用。
使用RxJava和Retrofit请求图灵API接口,获得问答信息
private void requestApiByRetrofit_RxJava(String info) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(TulingParams.TULING_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
RetrofitApi api = retrofit.create(RetrofitApi.class);
api.getTuringInfoByRxJava(TulingParams.TULING_KEY, info)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<MessageEntity>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(MessageEntity entity) {
handleResponseMessage(entity);
}
});
}
与上一节使用与分析不同的是这节中使用了RxJava的Scheduler调度器,通过Scheduler可以指定代码执行的线程。
下面列举了RxJava内置的几种线程:
AndroidSchedulers.mainThread() 主线程
Schedulers.immediate() 当前线程,即默认Scheduler
Schedulers.newThread() 启用新线程
Schedulers.io() IO线程,内部是一个数量无上限的线程池,可以进行文件、数据库和网络操作。
Schedulers.computation() CPU计算用的线程,内部是一个数目固定为CPU核数的线程池,适合于CPU密集型计算,不能操作文件、数据库和网络。
subscribeOn()和observeOn()可以用来控制代码的执行线程。
网友评论