2、RxJava2 Retrofit2 封装实践 初始化

2024-05-12 19:08

本文主要是介绍2、RxJava2 Retrofit2 封装实践 初始化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

RxJava2&Retrofit2的基本实现

RxJava2 & Retrofit2 & Rxlifecycle

依赖

    compile 'com.squareup.okhttp3:okhttp:3.7.0'compile 'com.squareup.retrofit2:retrofit:2.2.0'compile 'com.squareup.retrofit2:converter-gson:2.2.0'compile 'com.squareup.retrofit2:adapter-rxjava2:2.2.0'compile 'io.reactivex.rxjava2:rxandroid:2.0.1'compile 'io.reactivex.rxjava2:rxjava:2.0.8'compile 'com.trello.rxlifecycle2:rxlifecycle:2.0.1'// If you want to bind to Android-specific lifecyclescompile 'com.trello.rxlifecycle2:rxlifecycle-android:2.0.1'// If you want pre-written Activities and Fragments you can subclass as providerscompile 'com.trello.rxlifecycle2:rxlifecycle-components:2.0.1'

HTTPCENTER

public static final String SERVICE = "http://xxxa.com/web/";public static final String TOYS_SERVICE = "http://api.xxxb.com/";@StringDef({SERVICE, TOYS_SERVICE})@Retention(RetentionPolicy.SOURCE)public @interface HOST {}/*** 为了拓展性(切换Host),直接传入Retrofit.Builder* 要求传入的Retrofit.Builder是单例** @param builder* @return*/protected static Retrofit getRetrofit(Retrofit.Builder builder) {return builder.addConverterFactory(GsonConverterFactory.create(new Gson())).addCallAdapterFactory(RxJava2CallAdapterFactory.create()).client(initOkHttpClient()).build();}protected static Retrofit.Builder getBuilder(@HOST String host) {do {if (TextUtils.equals(host, SERVICE)) {return BuilderHolder.builder;}if (TextUtils.equals(host, TOYS_SERVICE)) {return BuilderHolder.toyBuilder;}} while (false);return null;}private static class BuilderHolder {private static Retrofit.Builder builder = new Retrofit.Builder().baseUrl(SERVICE);private static Retrofit.Builder toyBuilder = new Retrofit.Builder().baseUrl(TOYS_SERVICE);}/*** 用于请求的Retrofit** @return*/protected static Retrofit getRetrofitDm() {return getRetrofit(getBuilder(SERVICE));}protected static Retrofit getRetrofitToys() {return getRetrofit(getBuilder(TOYS_SERVICE));}public static HTTPService getService(@HOST String host) {do {if (TextUtils.equals(host, SERVICE)) {return ServiceHolder.DMSERVICE;}if (TextUtils.equals(host, TOYS_SERVICE)) {return ServiceHolder.TOYSERVICE;}} while (false);return null;}private static class ServiceHolder {static HTTPService DMSERVICE = getRetrofitDm().create(HTTPService.class);static HTTPService TOYSERVICE = getRetrofitToys().create(HTTPService.class);}/*** client** @return*/private static OkHttpClient initOkHttpClient() {OkHttpClient.Builder client = new OkHttpClient().newBuilder();client.retryOnConnectionFailure(true);client.connectTimeout(1, TimeUnit.MINUTES);client.readTimeout(1, TimeUnit.MINUTES);client.writeTimeout(1, TimeUnit.MINUTES);return client.build();}
  • 根据HOST初始化HTTPService,都实现了单例
    • 构建RetrofitBuilder
    • 根据Builder创建HTTPService
  • 创建OkhttpClient

HTTPService

public interface HTTPService {/*** 发现-推荐-时间轴** @param token* @param offset* @param limit* @return*/@GET("v2/index/list")Observable<TimeLineModel> requestRecommendTimeLine(@Query("offset") int offset, @Query("limit") int limit);@GET("index.php?r=message/heart")Observable<Heart> heart();}

Activity请求

private void dm() {HTTPCenter.getService(HTTPCenter.SERVICE).heart().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) //切换线程.compose(MainActivity.this.bindToLifecycle()) //绑定生命周期.doOnSubscribe(new Consumer<Disposable>() {@Overridepublic void accept(@NonNull Disposable disposable) throws Exception {Toast.makeText(MainActivity.this,"dm start",Toast.LENGTH_SHORT).show();}}).doOnTerminate(new Action() {@Overridepublic void run() throws Exception {Toast.makeText(MainActivity.this,"dm end",Toast.LENGTH_SHORT).show();}}).subscribe(new Consumer<Heart>() {@Overridepublic void accept(@NonNull Heart heart) throws Exception {if(heart != null) {tvDesc.setText(heart.toString());}}});}private void toys() {HTTPCenter.getService(HTTPCenter.TOYS_SERVICE).requestRecommendTimeLine(1,20).map(new Function<TimeLineModel, TimeLineModel>() {@Overridepublic TimeLineModel apply(@NonNull TimeLineModel timeLineModel) throws Exception {return timeLineModel;}}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).compose(MainActivity.this.bindToLifecycle()).subscribe(new Observer<TimeLineModel>() {@Overridepublic void onSubscribe(Disposable d) {}@Overridepublic void onNext(TimeLineModel timeLineModel) {tvDesc.setText(timeLineModel.toString());}@Overridepublic void onError(Throwable e) {}@Overridepublic void onComplete() {}});}

compose(MainActivity.this.bindToLifecycle())RxlifecycleActivity需要继承RxAppCompatActivity
RxLifecycle使用详情

好了,现在基本实现了Rxjava2 & Retrofit2进行网络请求,但是太初级了。下面我们来进行一点点封装~

这篇关于2、RxJava2 Retrofit2 封装实践 初始化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/983482

相关文章

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

使用Spring Cache本地缓存示例代码

《使用SpringCache本地缓存示例代码》缓存是提高应用程序性能的重要手段,通过将频繁访问的数据存储在内存中,可以减少数据库访问次数,从而加速数据读取,:本文主要介绍使用SpringCac... 目录一、Spring Cache简介核心特点:二、基础配置1. 添加依赖2. 启用缓存3. 缓存配置方案方案

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

Spring创建Bean的八种主要方式详解

《Spring创建Bean的八种主要方式详解》Spring(尤其是SpringBoot)提供了多种方式来让容器创建和管理Bean,@Component、@Configuration+@Bean、@En... 目录引言一、Spring 创建 Bean 的 8 种主要方式1. @Component 及其衍生注解

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

Java利用@SneakyThrows注解提升异常处理效率详解

《Java利用@SneakyThrows注解提升异常处理效率详解》这篇文章将深度剖析@SneakyThrows的原理,用法,适用场景以及隐藏的陷阱,看看它如何让Java异常处理效率飙升50%,感兴趣的... 目录前言一、检查型异常的“诅咒”:为什么Java开发者讨厌它1.1 检查型异常的痛点1.2 为什么说

基于Java开发一个极简版敏感词检测工具

《基于Java开发一个极简版敏感词检测工具》这篇文章主要为大家详细介绍了如何基于Java开发一个极简版敏感词检测工具,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录你是否还在为敏感词检测头疼一、极简版Java敏感词检测工具的3大核心优势1.1 优势1:DFA算法驱动,效率提升10

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I