当前位置: 首页 > news >正文

网站配色网如何运用网站模板

网站配色网,如何运用网站模板,莱芜论坛的最新帖子,帮忙做简历的网站文章目录 Retrofit类Builder内部类baseUrl()addConverterFactory()client() 对retrofit的创造实例过程进行源码剖析。 在说之前#xff0c;介绍一个api#xff0c;用于判断对象是否为空#xff0c;然后执行#xff0c;否则抛出异常#xff0c;该api在下边很多地方都会出现… 文章目录 Retrofit类Builder内部类baseUrl()addConverterFactory()client() 对retrofit的创造实例过程进行源码剖析。 在说之前介绍一个api用于判断对象是否为空然后执行否则抛出异常该api在下边很多地方都会出现 public static T T requireNonNull(T obj, String message) {if (obj null)throw new NullPointerException(message);return obj;} //用法Objects.requireNonNull(obj, obj null);Retrofit类 public final class Retrofit {// 网络请求配置对象对网络请求接口中方法注解进行解析后得到的对象// 作用存储网络请求相关的配置如网络请求的方法、数据转换器、网络请求适配器、网络请求工厂、基地址等private final MapMethod, ServiceMethod? serviceMethodCache new ConcurrentHashMap();// Call.Factory 实例用于生产网络请求器发送网络请求。默认使用的是okhttpfinal okhttp3.Call.Factory callFactory;// API 的基础 URL 地址final HttpUrl baseUrl;// Converter.Factory 实例的列表用于序列化和反序列化对象final ListConverter.Factory converterFactories;// CallAdapter.Factory 实例的列表用于支持不同于 Call 的返回类型final ListCallAdapter.Factory callAdapterFactories;// 回调方法执行的 Executorfinal Nullable Executor callbackExecutor;// 是否在创建 Retrofit 实例时进行配置验证final boolean validateEagerly;省略构造函数... Builder内部类 Builder类的成员变量与Retrofit类的成员变量是对应的所以Retrofit类的成员变量基本上是通过Builder类的链式调用方法进行配置 public static final class Builder {private Platform platform; // 平台对象private okhttp3.Call.Factory callFactory; // 网络请求的 Call.Factoryprivate HttpUrl baseUrl; // API 的基础 URL 地址private ListConverter.Factory converterFactories new ArrayList(); // 数据转换器工厂列表private ListCallAdapter.Factory adapterFactories new ArrayList(); // 适配器工厂列表private Executor callbackExecutor; // 回调方法执行器private boolean validateEagerly; // 是否提前验证// 构造函数public Builder() {this(Platform.get()); // 使用 Platform.get() 初始化 Builder↓}// 获取平台对象static Platform get() {return PLATFORM;}// Builder 的有参构造函数public Builder(Platform platform) {this.platform platform; // 设置平台对象(Android)// converterFactories是一个存放数据转换器Converter.Factory的数组,下边添加数据转换器converterFactories.add(new BuiltInConverters()); // 初始化数据转换器工厂,// BuiltInConverters是一个内置的数据转换器工厂继承Converter.Factory类} } 那么我们调用构造函数时就会调用有参构造函数参数最终是PLATFORM这个参数在Platform类中已经定义 class Platform {private static final Platform PLATFORM findPlatform();static Platform get() {return PLATFORM;}// 查找适合的平台private static Platform findPlatform() {// 判断当前平台是否为 DalvikAndroidreturn Dalvik.equals(System.getProperty(java.vm.name))? new Android() // 如果是 Android 平台则返回 Android 对象: new Platform(true); // 否则返回一个默认的 Platform 对象}/*下面的可以不用看,直到内部类Android*/// 是否支持 Java 8 类型private final boolean hasJava8Types;// MethodHandle 的构造函数private final Nullable ConstructorLookup lookupConstructor;// 构造函数Platform(boolean hasJava8Types) {this.hasJava8Types hasJava8Types;// 初始化 lookupConstructorConstructorLookup lookupConstructor null;if (hasJava8Types) {try {// 获取 MethodHandle 的构造函数lookupConstructor Lookup.class.getDeclaredConstructor(Class.class, int.class);lookupConstructor.setAccessible(true); // 设置为可访问} catch (NoClassDefFoundError ignored) {// 对于 Android API 24 或 25Lookup 类不存在无法调用默认方法} catch (NoSuchMethodException ignored) {// 假设 JDK 14修复了默认方法的问题}}this.lookupConstructor lookupConstructor;}// 获取默认的回调方法执行器NullableExecutor defaultCallbackExecutor() {return null;}// 获取默认的网络请求适配器工厂列表List? extends CallAdapter.Factory defaultCallAdapterFactories(Nullable Executor callbackExecutor) {DefaultCallAdapterFactory executorFactory new DefaultCallAdapterFactory(callbackExecutor);return hasJava8Types? asList(CompletableFutureCallAdapterFactory.INSTANCE, executorFactory): singletonList(executorFactory);}// 获取默认的网络请求适配器工厂列表的大小int defaultCallAdapterFactoriesSize() {return hasJava8Types ? 2 : 1;}// 获取默认的数据转换器工厂列表List? extends Converter.Factory defaultConverterFactories() {return hasJava8Types ? singletonList(OptionalConverterFactory.INSTANCE) : emptyList();}// 获取默认的数据转换器工厂列表的大小int defaultConverterFactoriesSize() {return hasJava8Types ? 1 : 0;}// 判断方法是否为默认方法IgnoreJRERequirement // 仅在 API 24 上调用boolean isDefaultMethod(Method method) {return hasJava8Types method.isDefault();}// 调用默认方法IgnoreJRERequirement // 仅在 API 26 上调用NullableObject invokeDefaultMethod(Method method, Class? declaringClass, Object object, Object... args)throws Throwable {Lookup lookup lookupConstructor ! null? lookupConstructor.newInstance(declaringClass, -1 /* trusted */): MethodHandles.lookup();return lookup.unreflectSpecial(method, declaringClass).bindTo(object).invokeWithArguments(args);}// Android 平台的实现继承自 Platform。//用于接收服务器返回数据后进行线程切换在主线程显示结果static final class Android extends Platform {Android() {super(Build.VERSION.SDK_INT 24);}// 获取默认的回调方法执行器Overridepublic Executor defaultCallbackExecutor() {return new MainThreadExecutor();// 返回一个默认的回调方法执行器// 作用切换线程子-主线程并在UI线程中执行回调方法}// 调用默认方法NullableOverrideObject invokeDefaultMethod(Method method, Class? declaringClass, Object object, Object... args) throws Throwable {if (Build.VERSION.SDK_INT 26) {throw new UnsupportedOperationException(Calling default methods on API 24 and 25 is not supported);}return super.invokeDefaultMethod(method, declaringClass, object, args);}// Android 平台的主线程执行器static final class MainThreadExecutor implements Executor {private final Handler handler new Handler(Looper.getMainLooper());// 该Handler是上面获取的与Android UI线程绑定的Handler Overridepublic void execute(Runnable r) {handler.post(r);// 在UI线程进行对网络请求返回数据处理等操作。}}} } baseUrl() 我们通常调用该函数填入的都是String类型 public Builder baseUrl(String baseUrl) {Objects.requireNonNull(baseUrl, baseUrl null);return baseUrl(HttpUrl.get(baseUrl));//转换}我们可以看到他会跳转到baseUrl(HttpUrl baseUrl)方法↓ public Builder baseUrl(HttpUrl baseUrl) {Objects.requireNonNull(baseUrl, baseUrl null);ListString pathSegments baseUrl.pathSegments();//分割成几个路径碎片//检查是否以/结尾否则抛出异常if (!.equals(pathSegments.get(pathSegments.size() - 1))) {throw new IllegalArgumentException(baseUrl must end in /: baseUrl);}this.baseUrl baseUrl;return this;}addConverterFactory() //存储 Converter.Factoryprivate final ListConverter.Factory converterFactories new ArrayList();public Builder addConverterFactory(Converter.Factory factory) {converterFactories.add(Objects.requireNonNull(factory, factory null));return this;}这里用来把转换工厂放入Retrofit的集合中我们一般在括号内填的是第三方库GsonConverterFactory.create() public final class GsonConverterFactory extends Converter.Factory {public static GsonConverterFactory create() {// 调用create()↓return create(new Gson()); -步骤2}public static GsonConverterFactory create(Gson gson) {return new GsonConverterFactory(gson); // 创建了一个含有Gson对象实例的GsonConverterFactory ↓}private final Gson gson;private GsonConverterFactory(Gson gson) {if (gson null) throw new NullPointerException(gson null);this.gson gson;} Retrofit默认使用Gson进行解析 client() public Builder client(OkHttpClient client) {return callFactory(Objects.requireNonNull(client, client null));}/*** Specify a custom call factory for creating {link Call} instances.** pNote: Calling {link #client} automatically sets this value.*/public Builder callFactory(okhttp3.Call.Factory factory) {this.callFactory Objects.requireNonNull(factory, factory null);return this;}//当创建 Retrofit 实例时会使用这个 callFactory 对象来创建 Call 对象用于执行网络请求。
http://www.huolong8.cn/news/403118/

相关文章:

  • 零基础网站建设教学公司做护肤品好的网站
  • 网站风格细节成都做个网站
  • 做徽章的网站中国域名的管理机构是
  • 自由室内设计师接单网站外贸建站推广工作总结
  • 北京网站建设手机app电子商务建筑公司信用分查询官网
  • 专业做网站较好的公司广州市萝岗区做网站设计服务
  • 广西企业网站有哪些wordpress外链转內链
  • 学做网站需要学什么vi手册
  • 如何进行网站的宣传和推广济宁网站建设top
  • 具有营销型网站有哪些免费建立自己喜欢的盒
  • 监控视频怎么做直播网站杭州做网站建设公司
  • 网站开发最新流程python线上培训班学费一般多少
  • 网站模板库官网地方门户网站推广方法有那些
  • 企业网站设计注意事项专门做石材地花设计的网站
  • int域名网站有哪些在线制作流程图网页
  • 牡丹江3d网站开发公众号运营技巧
  • 怎么请人做网站12306网站多钱做的
  • 建筑网站哪里找做网站推广汉狮网络
  • 番禺网站建设技术产品商城网站建设
  • wordpress适应式网站博客模板网站搜索工具
  • 营销型网站建设需要懂什么软件wordpress 主题 下载
  • 排版设计的网站北京虚拟注册地址新政
  • 电子商务网站商品怎么来网站系统开发报价单
  • 门户网站建设招投标番禺人才网官网入口
  • nancy网站开发找别人做网站注意事项
  • 网站开发公司怎么接单子如何搭建自己的网站服务器
  • 建一个外贸网站多少钱南昌网站建设怎么样
  • 罗定建设局网站百度账号快速登录
  • 网站模板是怎么制作成都百度公司在哪里
  • 想创建一个网站近几天的新闻大事