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

济南 网站建设wordpress如何网页浏览数据库

济南 网站建设,wordpress如何网页浏览数据库,做前端的女生压力大吗,公司网站建设费文章目录 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.zqtcl.cn/news/890649/

相关文章:

  • 建设上线网站seo关键词优化软件排名
  • 郑州手工网站建设公司企业做网站好做吗
  • 苏华建设集团网站产品营销网站
  • 郑州专业做网站的网站收录最好的方法
  • 微信小程序网站建设哪家好视频教学网站开发
  • 个人网站排行网站集约化后如何建设
  • 企业网站维护wordpress特效代码
  • 建设银行网站短信错误6次wordpress新主题去版权
  • 国外 配色网站天猫店购买交易平台
  • 网站推广广告词大全集网站和网络建设自查报告
  • 电子商务网站建设备案须知自己做的网站服务器在哪里
  • 怎样用wordpress做网站wordpress 首页判断
  • jsp做的网站效果织梦网站程序模板
  • 展示型网站设计公司网盘wordpress
  • 网站建设 保密学服装设计后悔了
  • 网站建设前端和后端网站开发所遵循的
  • 有自己域名的个人网站企业网站建设制作公司
  • 工程行业网站优化网站推广排名
  • 青岛网站建设软件下载广州app网站建设
  • 天津市建设厅官方网站qq电脑版登录
  • 贵阳手机网站建设公司辽源网站建设
  • 淄博网站设计制作wordpress 纯静态首页
  • 规划电子商务网站流程福清建设局网站简介
  • 使用joomla的网站网络营销师资格证有什么用
  • 做经营网站怎么赚钱吗关于做网站的合同
  • 上海手机网站建设哪家好重庆景点
  • 做网站菜单背景图片wordpress伪原创词库
  • 网络维护工程师工资多少聊城哪里做优化网站
  • 网站开发用什么字体查询域名备案
  • 济南品牌网站建设公司网站单个页面紧张搜索引擎蜘蛛