retrofit的使用实例(封装以后比较简单明了)

     //联网登录请求的使用Map<String, String> map = new HashMap<>();map.put("userName" , phone);map.put("passWord" , pwd);System.out.println(phone + "----" + pwd);UseCase addressNetUpdate = new LoginUpdate(map);addressNetUpdate.execute(new ResponseSubscriber<UpdateNetBean>() {@Overridepublic void onFailure(Throwable e) {e.printStackTrace();loginView.loginError("服务器繁忙,请稍后重试");}@Overridepublic void onSuccess(UpdateNetBean updateNetBean) {int infoCode = updateNetBean.getInfoCode();if (infoCode == 200){loginView.loginSuccess(phone);}else{loginView.loginError("商户号或密码错误");}}});
  • LoginUpdate类的使用
/*** Created by shiqiang on 2017/2/23.*/
public class LoginUpdate extends UseCase {public Map<String, String> map;public LoginUpdate(Map<String,String> map){super();this.map = map;}//Rxjava中的被观察者:Observable @Overrideprotected Observable buildUseCaseObservable() {return RetrofitServiceFactory.getAppService().updateNetCall(map);}
}
  • 上面返回的Observable 在何时被调用.execute()的时候封装了,代码如下
public abstract class UseCase {private final ThreadExecutor threadExecutor;private final PostExecutionThread postExecutionThread;private Subscription subscription = Subscriptions.empty();protected UseCase() {//分别对应线程池跟主线程,下面贴出代码this.threadExecutor = JobExecutor.getInstance();this.postExecutionThread = UIThread.getInstance();}//调取时候的代码,使用Rxjava订阅者模式public void execute(Subscriber UseCaseSubscriber) {this.subscription = this.buildUseCaseObservable()//调取子类.subscribeOn(Schedulers.from(threadExecutor))//网络请求在子线程中,创建的线程池,代码下面贴在下面.observeOn(postExecutionThread.getScheduler())//返回的结果在主线程中回调给view做数据的处理,使用单例模式封装主线程UI进程.subscribe(UseCaseSubscriber);}public void unSubscribe() {if (!subscription.isUnsubscribed()) {subscription.unsubscribe();}}protected abstract Observable buildUseCaseObservable();}
  • 创建buildUseCaseObservable的原理为:
  @Overrideprotected Observable buildUseCaseObservable() {return RetrofitServiceFactory.getAppService().updateNetCall(map);}/*** 根据不同功能模块返回不同的Service接口对象*/
public class RetrofitServiceFactory {//网络请求头private static final String Base_URL = UserContentURL.URL_SERVER;public static NetworkApi getAppService(){return AppRetrofit.getNewsRetrofit(NetworkApi.class,Base_URL);}}public class AppRetrofit {public static <T> T getNewsRetrofit(Class<T> clazz, String baseUrl) {if (TextUtils.isEmpty(baseUrl)) {throw new IllegalArgumentException("BaseUrl cannot be null");}
///*** 判断是否需要缓存数据,默认为false,可以用单利在每次请求之前设置值*/
//        if (true){if (App.getIsChach()){Retrofit retrofit = new Retrofit.Builder().baseUrl(baseUrl) //刚刚添加进来的请求头.client(getCacheOkHttpClient(App.getApplication()))  //使用缓存,Interceptor截获每次网络请求用于缓存数据.addCallAdapterFactory(RxJavaCallAdapterFactory.create())  //添加Rxjava//添加Gson解析.addConverterFactory(GsonConverterFactory.create()).build();return retrofit.create(clazz);}else{Retrofit retrofit = new Retrofit.Builder().baseUrl(baseUrl).client(getOKHttpClient()).addCallAdapterFactory(RxJavaCallAdapterFactory.create())//添加Gson解析.addConverterFactory(GsonConverterFactory.create()).build();return retrofit.create(clazz);}}//网络请求时间的设置private static OkHttpClient getOKHttpClient(){return new OkHttpClient.Builder()
//                .connectTimeout(20000, TimeUnit.MILLISECONDS).connectTimeout(10000, TimeUnit.SECONDS).writeTimeout(10000, TimeUnit.SECONDS).readTimeout(10000, TimeUnit.SECONDS).build();}//缓存的代码private static OkHttpClient getCacheOkHttpClient(final Context context){final File baseDir = context.getCacheDir();final File cacheDir = new File(baseDir, "HttpResponseCache");
//        Timber.e(cacheDir.getAbsolutePath());Cache cache = new Cache(cacheDir, 10 * 1024 * 1024);   //缓存可用大小为10M//Retrofit网络请求时候的截获类InterceptorInterceptor REWRITE_CACHE_CONTROL_INTERCEPTOR = new Interceptor() {@Overridepublic Response intercept(Chain chain) throws IOException {Request request = chain.request();if(!NetWorkUtils.isNetWorkAvailable(context)){request = request.newBuilder().cacheControl(CacheControl.FORCE_CACHE).build();}Response originalResponse = chain.proceed(request);if (NetWorkUtils.isNetWorkAvailable(context)) {int maxAge = 60;                  //在线缓存一分钟return originalResponse.newBuilder().removeHeader("Pragma").removeHeader("Cache-Control").header("Cache-Control", "public, max-age=" + maxAge).build();} else {int maxStale = 60 * 60 * 24 * 4 * 7;     //离线缓存4周return originalResponse.newBuilder().removeHeader("Pragma").removeHeader("Cache-Control").header("Cache-Control", "public, only-if-cached, max-stale=" + maxStale).build();}}};return new OkHttpClient.Builder().addNetworkInterceptor(REWRITE_CACHE_CONTROL_INTERCEPTOR).addInterceptor(REWRITE_CACHE_CONTROL_INTERCEPTOR).cache(cache).connectTimeout(10000, TimeUnit.SECONDS).writeTimeout(10000, TimeUnit.SECONDS).readTimeout(10000, TimeUnit.SECONDS).build();}}
  • 观察者,请求以后的回调,由于 ResponseSubscriber extends Subscriber ,儿Subscriber
//使用了Gson可以直接转化对象
addressNetUpdate.execute(new ResponseSubscriber<UpdateNetBean>() {@Overridepublic void onFailure(Throwable e) {e.printStackTrace();loginView.loginError("服务器繁忙,请稍后重试");}@Overridepublic void onSuccess(UpdateNetBean updateNetBean) {int infoCode = updateNetBean.getInfoCode();if (infoCode == 200){loginView.loginSuccess(phone);}else{loginView.loginError("商户号或密码错误");}}});

[源码github地址](“https://github.com/weiaiCmeng/RetrofitTest“)

Retrofit网络框架的封装使用相关推荐

  1. Android之全面解析Retrofit网络框架封装库

    转载请标明出处:[顾林海的博客] 前言 Retrofit是Square公司推出的一个HTTP的框架,主要用于Android和Java,Retrofit会将每一个HTTP的API请求变成一个Java的接 ...

  2. 网络框架的封装(二)

    Volley的使用(二) 刚说完夜深了,狗都睡了,邻居的小狗又开始狺狺狂吠了,都这个点了,洗洗睡吧,接着上文详解. HttpProcessManager,一般的网络框架都可以封装到这个类里面,先声明一 ...

  3. 开源框架相关面试问题-retrofit网络框架面试问题讲解

    retrofit使用简介: 在retrofit中通过一个接口作为Http请求的api接口. 注意:@GET("url")中的url只是一个路径,不包含主机号的. 创建一个retro ...

  4. OKHTTP和retrofit 网络框架集成的有https验证的APP破解抓包

    由于公司需要,批不得以要从友商的APP上面抓些数据来用,根据一般的经验我直接用Fiddler抓包工具来抓,平时抓些基础数据用这个工具还是很坚挺的,使用也很简单.但是连接上手机后具体操作才发现,返回的连 ...

  5. MVVM+Retrofit+Kotlin网络框架封装

    上篇文章讲了MVVM入门,网络请求部分非常简单和原始,本篇则是上一篇的进阶,主要讲解如何在vm中使用协程结合Retrofit进行网络框架的封装. GitHub完整版:https://github.co ...

  6. Android网络框架okhttp3简单封装

    1:在demo得build文件中添加依赖(这里以3.8.1版本为例) dependencies {compile 'com.squareup.okhttp3:okhttp:3.8.1' } 2:对网络 ...

  7. 一个整合OkHttp 、Retrofit 、Volley 、RxJava、Novate多种开源网络框架的项目,高度的封装和集成,Android中Web网络请求一行代码解决

    一个整合OkHttp .Retrofit .Volley .RxJava.Novate多种开源网络框架的项目,高度的封装和集成,Android中Web网络请求一行代码解决 AndroidHttp 一个 ...

  8. Retrofit + Kotlin + MVVM 的网络请求框架的封装尝试

    1.前言 之前在学习郭霖<第一行代码>时按部就班地写过一个彩云天气 App,对里面的网络请求框架的封装印象非常深刻,很喜欢这种 Retrofit + Kotlin + 协程的搭配使用.随后 ...

  9. android快捷开发之Retrofit网络加载框架的简单使用

    大家都知道,安卓最大的特点就是开源化,这自然会产生很多十分好用的第三方API,而基本每一个APP都会与网络操作和缓存处理机制打交道,当然,你可以自己通过HttpUrlConnection再通过返回数据 ...

最新文章

  1. 现代操作系统: 第八章 多处理机系统
  2. 优化MySQL数据类型——《深究MySQL》
  3. Python基础教程---读书笔记四
  4. C# WPF MVVM开发框架Caliburn.Micro IResult和协同程序⑥
  5. c语言中文件读写面试题,在C ++中有效读取非常大的文本文件
  6. jQuery基础 - 常用基本属性
  7. csh shell_一篇文章从了解到入门shell
  8. 集成Jupyter notebook的工具或平台
  9. IntelliJ IDEA 背景色以及字体设置
  10. “KVM is not available”的相应解决方案
  11. vue组件之间的参数传递
  12. html图标命名,html 命名规范
  13. 大数据学习完整学习路线
  14. AUI框架的介绍和使用
  15. python k折交叉验证,python中sklearnk折交叉验证
  16. [附源码]Java计算机毕业设计SSM房屋出租管理系统
  17. 外贸员必看,教你如何开发客户
  18. 机器学习中L1正则化和L2正则化
  19. python中父子进程
  20. SK海力士量产业界最高容量的移动端DRAM

热门文章

  1. Android 放图片背景的时钟
  2. 电工(海波)口录(自用/长期更新)
  3. 【拼图】拼图游戏-微信小程序开发流程详解
  4. 华为账户的安全手机号不能和登录手机号相同怎么办??直接再绑定一个安全邮件地址,然后删除那个安全手机号就可以了
  5. 华为可信认证考试-植被演化-2022年2月
  6. 查询表格——建立动态表格,使用ajax输入查询条件将后台数据查询出来以表格的形式展示出来...
  7. HTML圆和圆角柜形的制作,圆角柜——简约不简单
  8. 激光测距传感器如何高效远程监测泄洪时水闸高度?
  9. pandas按半小时区间分组统计
  10. 科大讯飞 唤醒python_用科大讯飞API实现本地语音文件识别