前言:GifFun是第一行代码作者郭霖大神的开源作品GifFun地址,对于像作者这样的应届生来说,寻找工作的痛点是技术门槛和项目经验,由于新手的技术限制与见识广度,显然GifFun提供了一个学习的机会。在刚开始看的时候,笔者是一头雾水看不懂,学习 Kotlin后还是不懂,直到我对着代码试着重头敲一下,回头一看,便豁然开朗。
因此,学习项目最好的方法是自己敲一遍。
废话不多说,首先我们导入GifFun进Studio中,可以看到GifFun分为了4个模块,其中network显然是网络模块,网络模块下分4个包,exception显然是网络异常包,util包显然是工具包,model包为Json转换模型包,request包为网络请求包。
第一次看到这个结构的时候就跟我第一次看Android的目录结构一样。网络的第一步就是连接,所以首先要从Request入手,可以看到request包下的文件都是继承自Request文件,因此要进入Request文件查看,在进入该文件前,首先需要回顾下okhttp的完整用法:
val formbody = FormBody.Builder()
.add("account", "admin")
.add("password", "123456")
.build(); //1
val request = Request.Builder()
.addHeader("cookie", "session=123")
.url("http://hello.world")
.post(formbody)
.build(); //2
val client = OkHttpClient() //3
client.newCall(request).enqueue(callback) //4
显然这是一个POST请求,我将其分为了4个部分,同样,Request文件我也将其分为对应的4个部分阅读。
第一部分,FormBody的组装
可以看到,Request文件下的formBody方法,具体代码如下:
/**
* 构建POST、PUT、DELETE请求的参数体。
*
* @return 组装参数后的FormBody。
*/
private fun formBody(): FormBody {
val builder = FormBody.Builder()
val params = getParams()
if (params != null) {
val keys = params.keys
if (!keys.isEmpty()) {
for (key in keys) {
val value = params[ke