上一篇我们讲到OkHttp+Retrofit,这篇就直接实现了:
https://blog.csdn.net/fayangzhou/article/details/80859318
这一批我们讲讲简单的OkHttp+Retrofit+Rxjava框架,如果要重点学习Rxjava的话就自己去找学习资料吧,字数太多自己看的都难受。
OKhttp+Retrofit+Rxjava就是一个网路框架+接口回调+异步执行的框架
1、加入各种库
implementation 'com.squareup.okhttp3:okhttp:3.4.1'//OkHttp库
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'//gson库
implementation 'com.squareup.retrofit2:retrofit:2.3.0'//retrofit库
implementation 'com.squareup.retrofit2:adapter-rxjava:2.3.0'//rxjava库
implementation 'io.reactivex:rxandroid:1.2.1'//rxandroid库
2、创建代理接口,实现header配置,比如使用Post
public interface RxjavaNetInterfaces { /** * 登录 * @param param //键值对,参数 * @return */ @POST("userLogin")//配置header @FormUrlEncoded Observable<ResponseBody> getLogin(@FieldMap Map<String,String> param);//这里我们采用Observable的Rxjava模式 }
3、设置具体实现,没有做封装,只是简单的能用就行
//设置OkHttpClient超时配置 int CONNECT_TIMEOUT = 10; int READ_TIMEOUT = 20; int WRITE_TIMEOUT = 20; OkHttpClient builder = new OkHttpClient(); builder.newBuilder().connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS); // 连接超时时间阈值 builder.newBuilder().readTimeout(READ_TIMEOUT, TimeUnit.SECONDS); // 数据获取时间阈值 builder.newBuilder().writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS); // 写数据超时时间阈值
//创建Retrofit Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://20w908s049.51mypc.cn:57626/Canteen/") .addCallAdapterFactory(RxJavaCallAdapterFactory.create())//提供Rxjava支持 .client(builder)//载入OkHttpClient的配置 .build();
//创建接口 RxjavaNetInterfaces rxjavaNetInterfaces = retrofit.create(RxjavaNetInterfaces.class); Map<String, String> params = new HashMap<>(); params.put("Uphone", "33"); params.put("Upassword", "33"); params.put("Uadmin", "false");
//使用接口代理 Observable<ResponseBody> observable = rxjavaNetInterfaces.getLogin(params); observable.subscribeOn(Schedulers.io())//被调用者io线程 .observeOn(AndroidSchedulers.mainThread())//调用者主线程 .subscribe(new Subscriber<ResponseBody>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(ResponseBody responseBody) { try { Log.e("123", responseBody.string()); } catch (IOException e) { e.printStackTrace(); } } });
OK,完成,简单明了,跟以前的哪些用法没多大区别,那么用这个有啥好处呢?OkHttp的优点:
支持SPDY, 可以合并多个到同一个主机的请,使用连接池技术减少请求的延迟(如果SPDY是可用的话) ,
使用GZIP压缩减少
传输
的数据量,
缓存响应避免重复的网络请求、拦截器等等。
Retrofit的优点:
编程思想:减少解耦,降低耦合,让我的接口开发灵活,不同api之间互相不干扰,
代码风格:使用注解方式,代码简洁,易懂,易上手
设计思想:采用多种设计模式,开发构建简便!
Rxjava的优点:
响应式编程
观察者设计模式-----接口回调
一个实现异步操作的库 -----异步执行
总结就是OKhttp+Retrofit+Rxjava就是一个网路框架+接口回调+异步执行的框架