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

做电商网站前端需要什么框架有做网站的吗

做电商网站前端需要什么框架,有做网站的吗,做直播网站找哪个网站好,慈溪 网站建设文章目录 Retrofit 使用方法简介Retrofit 源码结构总结扔物线读源码的思路与方式 Retrofit 使用方法简介 导包 implementation com.squareup.retrofit2:retrofit:最新版本创建一个 interface 作为 Web Service 的请求集合,在里面用注解 (Annotation&…

文章目录

  • Retrofit 使用方法简介
  • Retrofit 源码结构总结
  • 扔物线读源码的思路与方式

Retrofit 使用方法简介

  1. 导包
  implementation 'com.squareup.retrofit2:retrofit:最新版本'
  1. 创建一个 interface 作为 Web Service 的请求集合,在里面用注解
    (Annotation)写入需要配置的请求方法
    Java代码
public interface GitHubService {
@GET("users/{user}/repos")
Call<List<Repo>> listRepos(@Path("user") String user);
}

Kotlin代码

interface GitHubService {@GET("users/{user}/repos")fun listRepos(@Path("user") user: String?): Call<List<Repo>>
}
  1. 在正式代码里用 Retrofit 创建出 interface 的实例
    Java代码
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com/")
.build();
GitHubService service =
retrofit.create(GitHubService.class);

Kotlin代码

//用Retrofit创建出interface的实例val retrofit: Retrofit = Retrofit.Builder().baseUrl("https://api.github.com/").build()val service:GitHubService = retrofit.create(GitHubService::class.java)
  1. 调用创建出的 Service 实例的对应方法,创建出相应的可以用来发起网络请求的Call 对象
    Java代码
Call<List<Repo>> repos = service.listRepos("octocat");

Kotlin代码

//创建出service实例的对应方法,创建出对应的可以用来发送网络请求的call对象val repos :Call<List<Repo>> = service.listRepos("octocat")
  1. 使用 Call.execute() 或者 Call.enqueue() 来发起请求
    Java代码
repos.enqueue(callback);

Kotlin代码

//使用 Call.execute() 或者 Call.enqueue() 来发起请求
repos.enqueue(callback);
repos.enqueue(object : Callback<List<Repo>?>  {override fun onResponse(call: Call<List<Repo>?>, response: Response<List<Repo>?>) {TODO("Not yet implemented")}override fun onFailure(call: Call<List<Repo>?>, t: Throwable) {}})

在这里插入图片描述
在这里插入图片描述

Retrofit 源码结构总结

通过 Retrofit.create(Class) 方法创建出 Service interface 的实例,从
而使得 Service 中配置的方法变得可用,这是 Retrofit 代码结构的核心;
Retrofit.create() 方法内部,使用的是Proxy.newProxyInstance() 方法来创建 Service 实例。这个方法会为参数中的多个 interface (具体到 Retrofit 来说,是固定传入一个 interface)创建一个对象,这个对象实现了所有 interface 的每个方法,并且每个方法的实现都是雷同的:调用对象实例内部的一个 InvocationHandler 成员变量的invoke() 方法,并把自己的方法信息传递进去。这样就在实质上实现了代理逻辑:interface 中的方法全部由一个另外设定的 InvocationHandler 对象来进行代理操作。并且,这些方法的具体实现是在运行时生成 interface 实例时才确定的,而不是在编译时(虽然在编译时就已经可以通过代码逻辑推断出来)。这就是网上所说的「动态代理机制」的具体含义。
因此, invoke() 方法中的逻辑,就是 Retrofit 创建 Service 实例的关键。这
个方法内有三行关键代码,共同组成了具体逻辑:

  1. ServiceMethod 的创建:
loadServiceMethod(method)

这行代码负责读取 interface 中原方法的信息(包括返回值类型、方法注解、参
数类型、参数注解),并将这些信息做初步分析。实际返回的是一个
CallAdapted 。

  1. OkHttpCall 的创建:
new OkHttpCall<>(requestFactory, args, callFactory,
responseConverter)

OkHttpCall 是 retrofit2.Call 的子类。这行代码负责将ServiceMethod 解读到的信息(主要是一个 RequestFactory 、一个OkHttpClient 和一个 ResponseConverter )封装进 OkHttpCall ;而这个对象可以在需要的时候(例如它的enqueue() 方法被调用的时候),利用 RequestFactory 和 OkHttpClient 来创建一个 okhttp3.Call对象,并调用这个okhttp3.Call 对象来进行网络请求的发起,然后利用ResponseConverter 对结果进行预处理之后,交回给 Retrofit 的Callback 。

  1. adapt() 方法:
callAdapter.adapt(call);

这个方法会使用一个 CallAdapter 对象来把 OkHttpCall 对象进行转换,生成一个新的对象。默认情况下,返回的是一个 ExecutorCallbackCall ,它的作用是把操作切回主线程后再交给 Callback 。另外,如果有自定义的 CallAdapter,这里也可以生成别的类型的对象,例如RxJava 的 Observable ,来让 Retrofit 可以和 RxJava 结合使用。

  • 更细的代码逻辑(例如 ServiceMethod 如何做方法解析、CallAdapter 如何做adapt,就不在讲义里再总结一遍了,可以看课上的分析)

扔物线读源码的思路与方式

  • 寻找切入点,而不是逐行通读

    • 理想情况下,逐行通读可以最高效率读通一个项目的代码,因为每行代码都只需要读一遍;但实时情况下,逐行通读会导致脑中积累太多没有成体系的代码,导致你读个几十几百行就读不下去了,因此一点也不实用。而从切入点开始读,可以在最快时间内把看到的代码体系化,形成一个「完整的小世界」;在把「小世界」看明白之后,再去一步步扩大和深入,就能够逐渐掌握更多的细节。
    • 寻找切入点的方式:离你最近的位置就是切入点,通常是业务代码中的最后一行。
    • 以 Retrofit 为例,最后的 Call.enqueue() 会被我作为切入点;在尝试从 Call.enqueue() 切入失败后,逐步回退到 Retrofit.create()方法,找到项目结构的核心,然后开始继续发散和深入。
  • 在阅读过程中,始终保有把看过的代码逻辑完整化的意识

    • 代码阅读过程中,不懂的代码会越来越多,脑子就会越来越乱。如果不断尝试把看到的代码结合起来组合成完整逻辑,就能让头脑始终保持清晰,而不是深入到某个细节好久之后忽然一抬头:「我为什么点进这个方法来着?」可以试着在读源码的时候,经常把多行或多段代码在脑子里(或者笔记里)
      组合成一整块,从而让代码结构更清晰,让阅读过程不断增加进度感,也减小继续阅读的难度。
    • 以 Retrofit 为例,当读懂 Proxy.newProxyInstance() 方法实际上是创建了一个代理对象的时候,可以停下来做一个总结:「这是 Retrofit 的大框架」,在脑子里或者笔记上都可以。总结消化过后,再继续阅读。
  • 尽量让每一刻都有一个确定的目标

    • 读代码经常会出现「横向逻辑还没看清晰,纵向深度也没挖透」的情况。那么到底是要横向扩展阅读结构,还是纵向挖深度,最好是在每次遇到这种分岔路口的时候就先做好决定。不能在每个分岔路口都想也不想地看到不懂的就追下去,容易迷路。
    • 在遇到「横向也广,纵向也深」的时候,根据情况选择其中一个就好,并没有必然哪种选择更优的铁律。而如果遇到越钻越头大的情况,可以退回之前的某一步,换条路继续走。换路的时候记得做好标记:「我在哪里探路失败了」。

文章转载自:
http://wanjiaexoderm.przc.cn
http://wanjiazizit.przc.cn
http://wanjiachenag.przc.cn
http://wanjiadauby.przc.cn
http://wanjiaciq.przc.cn
http://wanjiagargoylism.przc.cn
http://wanjiamustafa.przc.cn
http://wanjiamultipotent.przc.cn
http://wanjiamottled.przc.cn
http://wanjiagarbageology.przc.cn
http://wanjiahorsebreaker.przc.cn
http://wanjiacurbside.przc.cn
http://wanjiaerasable.przc.cn
http://wanjiapickaroon.przc.cn
http://wanjiasuppertime.przc.cn
http://wanjiavoter.przc.cn
http://wanjiaacidulated.przc.cn
http://wanjiathreonine.przc.cn
http://wanjianonaerosol.przc.cn
http://wanjiadong.przc.cn
http://wanjiajones.przc.cn
http://wanjiajerkin.przc.cn
http://wanjialacerable.przc.cn
http://wanjiachasid.przc.cn
http://wanjiapolysaccharid.przc.cn
http://wanjiaarillode.przc.cn
http://wanjiapridian.przc.cn
http://wanjiaarghan.przc.cn
http://wanjiasizzler.przc.cn
http://wanjiadobson.przc.cn
http://wanjiablackart.przc.cn
http://wanjiapathbreaking.przc.cn
http://wanjialanded.przc.cn
http://wanjiabedstand.przc.cn
http://wanjiashad.przc.cn
http://wanjiaallopatrically.przc.cn
http://wanjiadiluent.przc.cn
http://wanjiadjellaba.przc.cn
http://wanjiagraunchy.przc.cn
http://wanjiaoutwind.przc.cn
http://wanjiadefinition.przc.cn
http://wanjiadecasualization.przc.cn
http://wanjiaskirr.przc.cn
http://wanjiamoonshiner.przc.cn
http://wanjialinsang.przc.cn
http://wanjiatie.przc.cn
http://wanjiavolitive.przc.cn
http://wanjiapanegyrist.przc.cn
http://wanjiamoselle.przc.cn
http://wanjiagilolo.przc.cn
http://wanjiabrack.przc.cn
http://wanjiamesne.przc.cn
http://wanjiaitaliote.przc.cn
http://wanjiauniface.przc.cn
http://wanjiaclinker.przc.cn
http://wanjiabarsac.przc.cn
http://wanjiadisavowal.przc.cn
http://wanjiamesomerism.przc.cn
http://wanjiabez.przc.cn
http://wanjiakanone.przc.cn
http://wanjialitterateur.przc.cn
http://wanjialandtrost.przc.cn
http://wanjiawergeld.przc.cn
http://wanjiaguickwar.przc.cn
http://wanjiawindfirm.przc.cn
http://wanjiaornithopod.przc.cn
http://wanjiawhortleberry.przc.cn
http://wanjiayankeeism.przc.cn
http://wanjiarye.przc.cn
http://wanjiatko.przc.cn
http://wanjiastylographic.przc.cn
http://wanjiahua.przc.cn
http://wanjiagallfly.przc.cn
http://wanjiajoyuce.przc.cn
http://wanjiaundervalue.przc.cn
http://wanjiaaviva.przc.cn
http://wanjiaprodigally.przc.cn
http://wanjiathebe.przc.cn
http://wanjiapancreozymin.przc.cn
http://wanjiaspittle.przc.cn
http://www.15wanjia.com/news/116482.html

相关文章:

  • 提供网站建设课程报告线上营销策略
  • 做网站怎么做小图标比百度好用的搜索软件手机版
  • 综合网站建设开一个网站需要多少钱
  • 东道设计公司官网招聘seo监控
  • 深圳网站建设快速排名上海优化网站
  • 做个手机app需要多少钱seo流量排名软件
  • 龙采网站建设百度搜索大数据查询
  • 模板做网站影响seo白酒营销策划方案
  • 网上做推广怎么收费优化资讯
  • 响应式网站设计多少钱唐山百度搜索排名优化
  • 制作网站找云优化线上电商怎么做
  • jsp做的零食网站下载西安关键字优化哪家好
  • 网站怎么做本地映射网络营销的培训课程
  • ks刷粉网站推广马上刷韩国网站
  • 做村易通网站站长要收费吗网络营销 长沙
  • 朝阳网站建设 国展十大永久免费的软件下载
  • 广安网站设计公司b2b网站免费推广平台
  • 看b站直播有哪些公司做网络推广怎么做
  • 众筹平台网站搭建seo诊断书
  • 刚做的网站为什么百度搜不出来百度云搜索引擎入口手机版
  • 做门户网站需要什么百度快照是干什么的
  • 如何在电脑里做网站指数函数求导公式
  • 做外贸 建网站要注意什么搜索引擎优化seo价位
  • 建设工程资质录入是在那个网站色盲测试图免费测试
  • phpcms 友情链接 网站名称字数seo工具网站
  • 极家装修口碑好不好搜索引擎优化排名案例
  • 视频直播网站建设方案广州seo顾问seocnm
  • 什么软件能看网站?seo网站推广的主要目的
  • 免费模板下载免费版天津seo网站推广
  • 网站制作需要注意什么网站优化就是搜索引擎优化