犀渠玉剑良家子,白马金羁侠少年。这篇文章主要讲述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(); } });
总结:【Android开发之Retrofit+RxJava的使用】Retrofit的使用和理解简单的梳理了一遍,希望能够帮助大家更好地理解Retrofit的使用。
源码点击下载
推荐阅读
- Android面试套路题越来越深入
- 启动avd Android模拟器缓慢 HAXM自动安装失败
- Android之Activity系列总结--Activity的四种启动模式
- Android深入源码分析理解Aidl整体调用流程(雷惊风)
- Android 官方示例(android-architecture 学习笔记之todo-mvp)
- Android之Activity系列总结--任务和返回栈
- 解决sdk更新时候报错 http://dl-ssl.google.com/android上不去,链接拒绝
- 电脑没有音频设备怎样办,图文详细说明电脑没有音频设备怎样处理
- 谷歌浏览器怎样设置首页,图文详细说明谷歌浏览器怎样设置首页