博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android开发之Retrofit+RxJava的使用
阅读量:6261 次
发布时间:2019-06-22

本文共 4052 字,大约阅读时间需要 13 分钟。

  hot3.png

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
getInfo2(@Query("platform") String platform, @Query("appkey") String appkey, @Query("c") String ip);

@QueryMap  如果Query参数比较多,那么可以通过@QueryMap方式将所有的参数集成在一个Map统一传递

@GET("app.php")Call
getInfoMap(@QueryMap Map
map);

注意:以上GET换成POST也是一样的效果

@Field("key") String key用于接口键值对类型参数

@FormUrlEncoded@POST("app.php")Call
postField(@Field("platform") String bookId, @Field("appkey") String title,@Field("c") String content);

@FieldMap  如果Field参数比较多,那么可以通过@FieldMap方式将所有的参数集成在一个Map统一传递

@FormUrlEncoded@POST("app.php")Call
postInfoMap(@FieldMap Map
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
getInfo1(); /*@Query("apikey") String apikey 用于接口键值对类型参数*/ @GET("app.php") Call
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
getInfoMap(@QueryMap Map
map);

使用

Retrofit retrofit = new Retrofit.Builder() .baseUrl(urls) .addConverterFactory(GsonConverterFactory.create()) .build();IRequestService service = retrofit.create(IRequestService.class);Call
call=service.getInfo1();call.enqueue(new Callback
() { @Override public void onResponse(Call
call, Response
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
call, Throwable t) { } });

Retrofit + RxJava结合使用

和上面差不多, 只不过不再是Call对象而是Observable对象,及RxJava中的事件源。

@GET(URL+"app.php?platform=android&appkey=5a379b5eed8aaae531df5f60b12100cfb6dff2c1&c=member&a=getdepartments")Observable
getRxjava();@POST("app.php")Observable
getUserFollowingObservable(@QueryMap Map
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
call = apiService.getUser(Util.showMap());subscription = call .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber
() { @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://my.oschina.net/zhangqie/blog/832026

你可能感兴趣的文章
windows server2012r2 安装NET Framework 3.5
查看>>
[osg][osgEarth][原]基于OE自定义自由飞行漫游器(初级版)
查看>>
Java遇见HTML——JSP篇之JSP基础语法
查看>>
导出一个数据库中的表中的某一条数据
查看>>
JQuery初体验
查看>>
全球顶级黑客对决AI GeekPwn2017黑客大赛看点全面曝光
查看>>
浅析前端开发中的 MVC/MVP/MVVM 模式
查看>>
toString、equals和hashCode重写
查看>>
sizeof 和strlen的区别
查看>>
Python与C++引用分析
查看>>
误删一个用户 引起数据不准确问题
查看>>
一场失败的拔河比赛
查看>>
IOS开发工程师欢迎你加入宏略信息
查看>>
java 判断当前时间符合cron时间表达式
查看>>
Telnet协议的实现
查看>>
我的友情链接
查看>>
(一)指南一、初学者指南1、简介2、安装
查看>>
约瑟夫·奈:透视网络空间
查看>>
我的友情链接
查看>>
大数据入门基础:Hadoop简介
查看>>