rxandroid结合retrofit2发送post请求
来源:互联网 发布:angular js scope 编辑:程序博客网 时间:2024/06/01 08:06
近日retrofit2正式版发布,终于可以愉快的使用retrofit2了。retrofit2是一个android http通讯框架,内部集成了okhttp。RxJava是一个异步执行框架,采用的是发布订阅模式。使用起来可以让代码更简洁。本文将介绍retrofit2 post的使用方法和集成RxAndroid的retrofit2 post方式的使用。
具体原理不多说,下面讲下使用流程吧。
1.配置gradle
//retrofit2相关依赖 compile 'com.squareup.retrofit2:retrofit:2.0.0' compile 'com.squareup.okhttp3:logging-interceptor:3.1.2' compile 'com.squareup.retrofit2:converter-gson:2.0.0' compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0' //rxandroid相关依赖 compile 'io.reactivex:rxandroid:1.1.0' compile 'io.reactivex:rxjava:1.1.0'
2.定义请求的service接口,举个例子
public interface RestApi { @FormUrlEncoded @POST("User/login") Call<BaseBean> login(@Field("mobile") String mobile, @Field("password") String password);}
3.发送网络请求,用异步方式,可直接在主线程调用
private void sendPost() { HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(); httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(httpLoggingInterceptor).build(); Retrofit retrofit = new Retrofit.Builder().client(okHttpClient).baseUrl("http://baidu.test/Api/") .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); RestApi restApi = retrofit.create(RestApi.class); Call<BaseBean> callBack = restApi.login("13812345678", "11111"); callBack.enqueue(new Callback<BaseBean>() { @Override public void onResponse(Call<BaseBean> call, Response<BaseBean> response) { try { Log.d("onResponse ", response.body().getMessage()); } catch (Exception e) { e.printStackTrace(); } } @Override public void onFailure(Call<BaseBean> call, Throwable t) { Log.d("onFailure ", "onFailure"); } }); }
这样,一个简易的使用retrofit2发送网络请求就完成了。
4.下面结合RxAndroid调用retrofit2。当retrofit2还带beta版本的时候,与RxAndroid结合使用似乎有些问题,RxJavaCallAdapterFactory实现的是retrofit老版的CallAdapter.Factory,所以不能使用。retrofit2的正式版已经没这个问题了。
首先还是定义一个service接口,与上面的不同,这个返回的是个Observable。
public interface RxApi { @FormUrlEncoded @POST("User/login") Observable<BaseBean> login(@Field("mobile") String mobile, @Field("ccid") String ccid, @Field("password") String password);}用Rx的方式调用接口
private void rxRetrofit() { HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(); httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(httpLoggingInterceptor).build(); Retrofit retrofit = new Retrofit.Builder().client(okHttpClient).baseUrl("http://baidu.test/Api/") .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); RxApi restApi = retrofit.create(RxApi.class); Observable<BaseBean> observable = restApi.login("13812345678", "11111"); observable.observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Observer<BaseBean>() { @Override public void onCompleted() { Log.d("onCompleted", "****************"); } @Override public void onError(Throwable e) { e.printStackTrace(); Log.d("onError", "****************" + e.getMessage()); } @Override public void onNext(BaseBean baseBean) { Log.d("onNext", "****************"); } }); }
单独使用retrofit2和结合Rx使用的方法就讲完了。想详细了解Retrofit2和RxAndroid的可以参考下面两篇文章。
Retrofit 2.0:有史以来最大的改进
给 Android 开发者的 RxJava 详解
2 1
- rxandroid结合retrofit2发送post请求
- RxAndroid结合OkHttp实现图片下载、get、post请求
- Android Retrofit2.0-post&get请求&文件上传&结合Rxjava
- Rxjava2.0和Retrofit2.0结合使用(2)post请求
- Rxjava与Rxandroid结合实现网络请求
- Retrofit2的get请求和post请求
- Retrofit2的get请求和post请求
- Retrofit2.0学习之Post请求
- retrofit2 POST请求体乱码终极解决
- Retrofit2+RxAndroid 详解
- rxAndroid+OkHttp+retrofit2三贱客
- Retrofit2.0+RxAndroid
- Rxjava2+retrofit2+rxAndroid+okHttp
- Retrofit2、okHttp3、RxAndroid使用
- Kotlin入门 + RxAndroid+Retrofit2
- Retrofit2.0+RxAndroid+RxBus
- IWebBrowser2 发送post请求
- WebClient发送POST请求
- cocoa touch框架UIkit学习
- 线程池原理及创建(C++实现)
- CGContextAddArcToPoint和CGContextAddArc
- 经典排序算法(8)——归并排序算法详解
- php与mysql之乱码问题
- rxandroid结合retrofit2发送post请求
- poj2481 Cows 树状数组 解题报告
- POJ 1251 Jungle Roads(最小生成树kruskal)
- Web端裁剪图片方法
- 经典排序算法(9)——桶排序算法详解
- 【Struts2进阶】Struts2拦截器实现基于Url的权限管理
- Eclipse 搭建gradle环境
- 《kali linux 渗透测试初级教程》免费下载
- 算法竞赛入门经典(第二版)-刘汝佳-第七章 暴力求解法 例题(6/15)