RxJava&Retrofit
来源:互联网 发布:日本电影翻译软件 编辑:程序博客网 时间:2024/06/05 02:26
Retrofit 的 Converter 是对于 Call<T>
中 T 的转换,而 CallAdapter 则可以对 Call 转换。Retrofit 提供了多个 CallAdapter,为 RxJava 提供了 Observable 形式 API:
Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://localhost:4567/") .addConverterFactory(GsonConverterFactory.create()) // 添加 RxJava 支持 .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build();
以获取一个 User 对象的接口作为例子。
使用 Retrofit 的传统 API:
// 定义请求 Service@GET("/user")public void getUser(@Query("userId") String userId, Callback<User> callback);// 调用getUser(userId, new Callback<User>() { @Override public void success(User user) { userView.setUser(user); } @Override public void failure(RetrofitError error) { // Error handling ... }};
使用 RxJava 形式的 API:
@GET("/user")public Observable<User> getUser(@Query("userId") String userId);// RxJava 的链式调用getUser(userId) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<User>() { @Override public void onNext(User user) { userView.setUser(user); } @Override public void onCompleted() { } @Override public void onError(Throwable error) { // Error handling ... } });
再举一个例子:假设 /user 接口并不能直接访问,而需要填入一个在线获取的 token。
Callback 方式,可以使用嵌套的 Callback:
@GET("/token")public void getToken(Callback<String> callback);@GET("/user")public void getUser(@Query("token") String token, @Query("userId") String userId, Callback<User> callback);...getToken(new Callback<String>() { @Override public void success(String token) { getUser(token, userId, new Callback<User>() { @Override public void success(User user) { userView.setUser(user); } @Override public void failure(RetrofitError error) { // Error handling ... } }; } @Override public void failure(RetrofitError error) { // Error handling ... }});
而使用 RxJava 的话,代码是这样的:
@GET("/token")public Observable<String> getToken();@GET("/user")public Observable<User> getUser(@Query("token") String token, @Query("userId") String userId);...// getToken 获取到 token 后 flatMap 转换成 UsergetToken() .flatMap(new Func1<String, Observable<User>>() { @Override public Observable<User> onNext(String token) { return getUser(token, userId); }) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<User>() { @Override public void onNext(User user) { userView.setUser(user); } @Override public void onCompleted() { } @Override public void onError(Throwable error) { // Error handling ... } });
参考:
给 Android 开发者的 RxJava 详解
你真的会用Retrofit2吗?Retrofit2完全教程
0 1
- Retrofit+Rxjava
- Retrofit+RxJava
- Retrofit+RxJava
- Retrofit+RxJava
- Retrofit+RxJava
- RxJava+Retrofit
- rxjava+retrofit
- RxJava&Retrofit
- Retrofit+Rxjava
- Retrofit+RxJava
- RXJava & Retrofit
- Rxjava+retrofit
- rxjava+retrofit
- Rxjava & Retrofit
- retrofit+Rxjava
- Retrofit + RxJava
- RxJava + Retrofit
- retrofit-rxjava封装、mvp-retrofit-rxjava demo
- Docker中如何删除image(镜像)
- UVA-512-Spreadsheet Tracking 简单模拟题 对一个表进行增删操作后查表 打表写法+详细注释
- swift——复合类型——Dict
- js中的this
- 学习笔记—C语言基础篇03
- RxJava&Retrofit
- File google-services.json is missing. The Google Services
- C语言计算字符串长度的几种方法
- JStorm学习笔记-集群环境安装部署
- uwsgi的定时脚本任务
- vue引入jquery的方法
- 机器学习笔记9——特征选择
- Nginx从入门到精通
- 文章标题