Rxjava2.0和Retrofit简单封装使用
来源:互联网 发布:淘宝朗丝香格里拉窗帘 编辑:程序博客网 时间:2024/05/21 06:26
前言
首先必须要声明的是,本文主要留作学习笔记,也供同样在学习的人一个参考,如有不足很正常。欢迎批评,批评使我进步。在此谢过。
切入主题
下面代码只是一个简单请求案例,废话少说,上代码。
栗子:
导包
//retrofit2 转化器 gson compile 'com.squareup.retrofit2:converter-gson:2.1.0' //引进Rxjava2.0 compile 'io.reactivex.rxjava2:rxandroid:2.0.0'
简单说下使用步骤,封装好的工具在后面上代码
//这里的json变量是post请求的 key "data" 的 value String json = new Gson().toJson(new TestBean("110")); //初始化封装好的 RetrofitNetManager manager = new RetrofitNetManager<TestBean.TestResponse>(new RetrofitNetManager.ConnManCallBack<TestBean.TestResponse>() { //在初始化对象RetrofitNetManager时传入回调接口 @Override public void onError(Throwable t) { //失败时调用 Log.e(TAG, "onComplete: "+t.getMessage() ); } @Override public void onComplete(TestBean.TestResponse response) { //成功时调用 if (response!=null){ Log.e(TAG, "onComplete: "+response.getName() ); } } }); //封装Retrofit的请求,Retrofit请求返回值一定是Call<T>类型 Call<TestBean.TestResponse> request = manager.getRetrofit().create(TestRetrofit.class).postxx("checkSignWalker", json); manager.getResponse(request);
前期准备:单例模式有益于防止内存泄漏,比如okhttpclient对象,Retrofit对象
准备retrofit Api,不要问什么,retrofit和Rxjava 的单独使用百度有很多资料,如果有需要,之后我会专门准备一篇博客详细讲解。
public interface TestRetrofit { @FormUrlEncoded @POST("{url}.action") Call<WelcomeActivity.TestBean.TestResponse> postxx(@Path(value = "url") String url, @Field(value = "data") String json);}
准备数据模型类,(这里推荐下GsonFormat,很好用的插件,谁用谁知道。)
public class TestBean{ private String phoneNumber; public TestBean(String phoneNumber) { this.phoneNumber = phoneNumber; } public class TestResponse{ private int code; private String name; public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getName() { return name; } public void setName(String name) { this.name = name; } } }
//范型T是用于设置返回数据类型,通常实际开发的过程中网络请求获取到的json数据会被我们转化成具体类对象 public class RetrofitNetManager <T>{ private static OkHttpClient client; private static final String BASE_URL = "*********";// private Class<T> clazz; private static final String TAG = "ym"; private ConnManCallBack callBack; private Response<T> result; private static Retrofit retrofit; //获取okhttpclient private OkHttpClient getClient(){ if (client==null){ OkHttpClient.Builder mBuilder = new OkHttpClient.Builder(); //信任https所有证书,详情见上一篇 mBuilder.sslSocketFactory(TrustAllCerts.createSSLSocketFactory()); mBuilder.hostnameVerifier(new TrustAllCerts.TrustAllHostnameVerifier()); //设置连接超时时间 mBuilder.connectTimeout(5, TimeUnit.SECONDS); client = mBuilder.build(); } return client; } //获取Retrofit对象 public Retrofit getRetrofit(){ //封装Retrofit对象 if (retrofit==null){ retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) //设置要连接的基础网址 .client(getClient()) //设置处理本次网络请求的okhttpclient对象 .addConverterFactory(GsonConverterFactory.create())//设置支持Gson解析 .build(); } return retrofit; } //重头戏来了,联网时调用的方法 public void getResponse(final Call<T> request){ //创建订阅者 Subscriber<String> subscriber = new Subscriber<String>() { @Override public void onSubscribe(org.reactivestreams.Subscription s) { s.request(Long.MAX_VALUE); } @Override public void onNext(String s) { Log.e(TAG,"RetrofitNetManager onNext:执行了"+s); request.enqueue(new Callback<T>() { @Override public void onResponse(Call<T> call, Response<T> response) { result = response; onComplete(); } @Override public void onFailure(Call<T> call, Throwable t) { Log.e(TAG, "RetrofitNetManager onFailure:执行了 "+t.getMessage() ); onError(t); } }); } @Override public void onError(Throwable t) { Log.e(TAG,"RetrofitNetManager onError:执行了"+t.getMessage()); callBack.onError(t); } @Override public void onComplete() { Log.e(TAG, "RetrofitNetManager onComplete:执行了 "); callBack.onComplete(result.body()); } }; Flowable.create(new FlowableOnSubscribe<String>() { @Override public void subscribe(FlowableEmitter<String> e) throws Exception { Log.i(TAG, "subscribe: 111111"); e.onNext(""); } }, BackpressureStrategy.BUFFER) .subscribe(subscriber); } public RetrofitNetManager(ConnManCallBack callBack) { this.callBack = callBack; }//接口回调时的接口,灵活设置联网成功失败时的操作 public interface ConnManCallBack<T>{ void onError(Throwable t); void onComplete(T response); }
2 0
- Rxjava2.0和Retrofit简单封装使用
- RxJava2.0+Retrofit使用
- RxJava2和Retrofit Http请求的封装
- 一步步封装Retrofit + RxJava2
- RxJava2.0 和 Retrofit 结合使用时的配置问题
- RxJava2和Retrofit封装的RetrofitClient2终于来了!
- Retrofit封装和使用
- RxJava2+retrofit实现网络封装
- (备忘录)Rxjava2+Retrofit封装1
- (备忘录)Rxjava2+Retrofit封装2
- RxJava2和Retrofit2.0的简单使用
- RxJava2和Retrofit
- Retrofit的简单封装使用
- 使用Rxjava2+Retrofit实现简单的快递查询
- 使用Retrofit和Rxjava对联网进行简单封装
- 简单封装retrofit2+rxjava2
- Novate 封装Rxjava2.0 的使用
- Retrofit网络通信库简单封装使用
- pat-bl-1028
- Multi-view Convolutional Neural Networks for 3D Shape Recognition
- Android音视频学习第1章:使用ffmpeg进行视频解码
- 解释器模式--Excel公式嵌套
- 性能测试2-性能测试流程
- Rxjava2.0和Retrofit简单封装使用
- hermite曲线
- jmap -histo ,jmap dumpfile, jstack
- 当你自己决定的时候
- 营养的源泉-android
- 51单片机数码管动态显示
- Python高阶函数——map/reduce/filter/sorted
- Python爬虫包 BeautifulSoup 学习(七) children等应用
- 第七届蓝桥杯大赛个人赛省赛(软件类)真题 C语言A组 1