android--------Retrofit+RxJava的使用
Retrofit是Square公司开发的一款针对Android网络请求的一个当前很流行的网络请求库。
http://square.github.io/retrofit/
https://github.com/square/retrofit
使用需引入:
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
compile 'io.reactivex:rxandroid:1.0.1'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
Retrofit包含了多种网络请求方式,可根据参考选择。
全路径
@GET(URL+"?platform=android&appkey=5a379b5eed8aaae531df5f60b12100cfb6dff2c1&c=member&a=getdepartments")
Call<解析实体类> getInfo1();
@Query("key") String key用于接口键值对类型参数
@GET("app.php")
Call<UserInfo> getInfo2(@Query("platform") String platform, @Query("appkey") String appkey, @Query("c") String ip);
@QueryMap 如果Query参数比较多,那么可以通过@QueryMap方式将所有的参数集成在一个Map统一传递
@GET("app.php")
Call<UserInfo> getInfoMap(@QueryMap Map<String,String> map);
注意:以上GET换成POST也是一样的效果
@Field("key") String key用于接口键值对类型参数
@FormUrlEncoded
@POST("app.php")
Call<UserInfo> postField(@Field("platform") String bookId, @Field("appkey") String title,@Field("c") String content);
@FieldMap 如果Field参数比较多,那么可以通过@FieldMap方式将所有的参数集成在一个Map统一传递
@FormUrlEncoded
@POST("app.php")
Call<UserInfo> postInfoMap(@FieldMap Map<String,String> map);
对于 Retrofit 中新的URL定义方式也是有一定要求的,版本不同有时格式也不一样,现在大多数2.0以上,@GET/POST()建议格式不要以 /开头,如:
@POST("/app.php")
而是:URL以 / 结尾 如:(注:全路径则不影响)
http://www.baidu.com/
代码:
定义接口 IRequestService .java
@GET(URL+"app.php?platform=android&appkey=5a379b5eed8aaae531df5f60b12100cfb6dff2c1&c=member&a=getdepartments")
Call<UserInfo> getInfo1(); /*@Query("apikey") String apikey 用于接口键值对类型参数*/
@GET("app.php")
Call<UserInfo> getInfo2(@Query("platform") String platform, @Query("appkey") String appkey, @Query("c") String ip, @Query("a") String tag); /*@QueryMap 如果Query参数比较多,那么可以通过@QueryMap方式将所有的参数集成在一个Map统一传递*/
@GET("app.php")
Call<UserInfo> getInfoMap(@QueryMap Map<String,String> map);
使用
Retrofit retrofit = new Retrofit.Builder() .baseUrl(urls) .addConverterFactory(GsonConverterFactory.create()) .build();
IRequestService service = retrofit.create(IRequestService.class);
Call<DepartmentInfo> call=service.getInfo1();
call.enqueue(new Callback<DepartmentInfo>() { @Override
public void onResponse(Call<DepartmentInfo> call, Response<DepartmentInfo> response) { DepartmentInfo info=response.body();
mTextView.setText(info.getError()+"-----"+info.getData().get(0).toString());
Toast.makeText(getApplicationContext(),info.getError(),Toast.LENGTH_LONG).show();
Log.i("tag", info.getData().get(0).getDepartname());
Log.i("tag", info.getData().get(1).getDepartname());
} @Override
public void onFailure(Call<DepartmentInfo> call, Throwable t) { } });
Retrofit + RxJava结合使用
和上面差不多, 只不过不再是Call对象而是Observable对象,及RxJava中的事件源。
@GET(URL+"app.php?platform=android&appkey=5a379b5eed8aaae531df5f60b12100cfb6dff2c1&c=member&a=getdepartments")
Observable<UserInfo> getRxjava(); @POST("app.php")
Observable<UserInfo> getUserFollowingObservable(@QueryMap Map<String,String> map);
使用
RxJavaCallAdapterFactory rxAdapter = RxJavaCallAdapterFactory.createWithScheduler(Schedulers.io());
Retrofit retrofit11 = new Retrofit.Builder()
.baseUrl(urls)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(rxAdapter)
.build();
IRxJavaService apiService = retrofit11.create(IRxJavaService.class);
Observable<DepartmentInfo> call = apiService.getUser(Util.showMap());
subscription = call
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<DepartmentInfo>() {
@Override
public void onCompleted() { }
@Override
public void onError(Throwable e) { }
@Override
public void onNext(DepartmentInfo user) { Toast.makeText(getApplicationContext(),
user.getData().get(0).getDepartname(),
Toast.LENGTH_SHORT) .show();
} });
总结:
Retrofit的使用和理解简单的梳理了一遍,希望能够帮助大家更好地理解Retrofit的使用。
源码点击下载:https://github.com/DickyQie/android-api-request
android--------Retrofit+RxJava的使用的更多相关文章
- Android Retrofit+RxJava 优雅的处理服务器返回异常、错误
标签: 开始本博客之前,请先阅读: Retrofit请求数据对错误以及网络异常的处理 异常&错误 实际开发经常有这种情况,比如登录请求,接口返回的 信息包括请求返回的状态:失败还是成功,错误码 ...
- Android Retrofit RxJava实现缓存
RxJava如何与Retrofit结合参考:http://blog.csdn.net/jdsjlzx/article/details/52015347 缓存配置 app网络数据的离线缓存实现有很多种办 ...
- Android MVP+Retrofit+RxJava实践小结
关于MVP.Retrofit.RxJava,之前已经分别做了分享,如果您还没有阅读过,可以猛戳: 1.Android MVP 实例 2.Android Retrofit 2.0使用 3.RxJava ...
- 82.Android之MVP+Retrofit+RxJava实践小结
转载:http://wuxiaolong.me/2016/06/12/mvpRetrofitRxjava/ 关于MVP.Retrofit.RxJava,之前已经分别做了分享,如果您还没有阅读过,可以猛 ...
- 基于Retrofit+RxJava的Android分层网络请求框架
目前已经有不少Android客户端在使用Retrofit+RxJava实现网络请求了,相比于xUtils,Volley等网络访问框架,其具有网络访问效率高(基于OkHttp).内存占用少.代码量小以及 ...
- Android MVP开发模式及Retrofit + RxJava封装
代码已上传到Github,因为接口都是模拟无法进行测试,明白大概的逻辑就行了! 欢迎浏览我的博客--https://pushy.site 1. MVP模式 1.1 介绍 如果熟悉MVP模式架构的话,对 ...
- Android 网络请求Retrofit + RxJava
一.背景 经常看到项目用Retrofit+RxJava+RxAndroid的框架,为了看懂项目的结构.现在来了解一下,Retrofit: Retrofit是Square 公司开发的一款正对Androi ...
- Android Retrofit 2.0 使用-补充篇
推荐阅读,猛戳: 1.Android MVP 实例 2.Android Retrofit 2.0使用 3.RxJava 4.RxBus 5.Android MVP+Retrofit+RxJava实践小 ...
- 78. Android之 RxJava 详解
转载:http://gank.io/post/560e15be2dca930e00da1083 前言 我从去年开始使用 RxJava ,到现在一年多了.今年加入了 Flipboard 后,看到 Fli ...
- 利用Retrofit, RxJava获取网络内容
Retrofit & RxJava 关于如何使用Retrofit和RxJava请阅读参考中的两篇文章. Retrofit处理数据 Retrofit是在什么时候处理从网络中获取到的json数据的 ...
随机推荐
- Spring,Struts2,MyBatis,Activiti,Maven,H2,Tomcat集成(二)——Struts2集成
1. pom.xml文件添struts2依赖jar包: <!-- 与Struts2集成必须使用 --> <dependency> <groupId>org.spri ...
- cojs 强连通图计数1-2 题解报告
OwO 题目含义都是一样的,只是数据范围扩大了 对于n<=7的问题,我们直接暴力搜索就可以了 对于n<=1000的问题,我们不难联想到<主旋律>这一道题 没错,只需要把方程改一 ...
- 计算概论(A)/基础编程练习1(8题)/7:奇数求和
#include<stdio.h> int main() { // 输入非负整数 int m, n; scanf("%d %d", &m, &n); / ...
- Putty Technical Note
转载自:http://libai.math.ncu.edu.tw/bcc16/6/putty/puttyt.html Terminal panel Terminal 面板可調整 PuTTY 對於模擬終 ...
- NFS Iptables放行服务端口
启动NFS会开启如下端口:1)portmapper 端口:111 udp/tcp:2)nfs/nfs_acl 端口:2049 udp/tcp:3)mountd 端口:"32768--6553 ...
- tensorflow reduction_indices理解
在tensorflow的使用中,经常会使用tf.reduce_mean,tf.reduce_sum等函数,在函数中,有一个reduction_indices参数,表示函数的处理维度,直接上图,一目了然 ...
- 'telnet'不是内部或外部命令,怎么办?
['telnet'不是内部或外部命令,也不是可运行的程序或批处理文件]当你想用telnet命令时,发现提示这句话怎么办?其实很简单,接下来为大家介绍下如何使用 1. 一般只有windows7才会出现这 ...
- 关于fragment点击穿透的问题
当一个activity有多个fragment的时候,点击当前显示的fragment,如果点击处在其他fragment中也有相应的控件,那么可能会点击穿透,有响应另外fragment事件的趋势.但是这个 ...
- BZOJ5281: [Usaco2018 Open]Talent Show 01分数规划+01背包
Description FarmerJohn要带着他的N头奶牛,方便起见编号为1…N,到农业展览会上去,参加每年的达牛秀!他的第i头奶牛重 量为wi,才艺水平为ti,两者都是整数.在到达时,Farme ...
- Linux下指定pip install和make install安装路径
在Linux下直接用pip install packageName,有些文件会被放到根目录下,如果没有sudo权限的话,是会安装失败的.这个以后我们就需要指定安装的目录了. pip install - ...