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数据的 ...
随机推荐
- Impala shell详解
不多说,直接上干货! 查看帮助文档 impala-shell -h 刷新整个云数据 impala-shell -ruse impala;show tables; 去格式化,查询大数据量时可以提高性能 ...
- 关于Spring中,定时任务执行两次的解决办法
原因:如果spring-quartz.xml文件,在Spring的配置文件spring-config.xml中被加载,那么定时任务会被Spring和SpringMVC扫描两次,所以会被执行两次. 解决 ...
- HTTP从入门到入土(5)——HTTP报文格式
HTTP报文格式 HTTP报文分为请求报文和响应报文,只有发送了请求报文,才会有响应报文. 常见的报文格式如下所示:
- jsp/servlet/mysql/linux基本概念和操作
一.什么是OOP编程? 面向对象,以结果为导向,并封装整个过程,并尽可能地增加代码的复用性和可扩展性...... 二.Junit? JUnit是一个java语言的单元测试框架.Junit测试时程序员测 ...
- python的re正则表达式模块
元字符 . * + ? ^ $ { } [ ] - \ . 匹配除了/n之外的任意一个字符 * 匹配*前面的单个字符任意次,即[0,+∞] + 匹配 ...
- eclipse启动失败Could not create the Java virtual machine
一直使用idea,今天有研究一个新功能,因为公司项目在idea,不想动idea或是切换工作空间之类.于是把我的老eclipse启起来,可谁成想,直接报错: 点击确定之后: 最后找到解决办法: 删掉 C ...
- Linux系统对IO端口和IO内存的管理
引用:http://blog.csdn.net/ce123_zhouwei/article/details/7204458 一.I/O端口 端口(port)是接口电路中能被CPU直接访问的寄存器的地址 ...
- WordPress REST API 内容注入漏洞
1 WordPress REST API 内容注入漏洞 1.1 摘要 1.1.1 漏洞介绍 WordPress是一个以PHP和MySQL为平台的自由开源的博客软件和内容管理系统.在4.7.0版本后,R ...
- 20145314郑凯杰《网络对抗技术》PE文件病毒捆绑(插入捆绑)的实现
20145314郑凯杰<网络对抗技术>PE文件病毒捆绑(插入捆绑)的实现 一.本节摘要 简介:每个应用程序内部都有一定的空间(因为文件对齐余留的00字段)可以被利用,这样就可以保证被插入的 ...
- bzoj 4033 树上染色 - 树形动态规划
有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑 色,并将其他的N-K个点染成白色.将所有点染色后,你会获得黑点两两之间的距离加上白点两两之间距离的 ...