本文会讲解哪些内容
1.APP显示的漫画数据,是从哪里来的?
2.如何将漫画数据显示到APP上?
3.在显示漫画数据的过程中,有哪些比较有**技术含量**的知识点?(面试、答辩值得向人讲一讲)
## **漫画源**
### **什么是漫画源?**
漫画源指的是漫画数据的源头,即漫画APP显示的主体内容。源头,即强调来自于哪里。
作为软件开发者,自己很少有创作漫画的时间和能力,因此,我们必须借助百度,搜索热门的漫画网站:
打开百度——搜索漫画——选则一款或多款漫画站点——进行研究
此APP的漫画源头,已经兼容了8个漫画网站,包括CC图库、动漫屋、可汗动漫、看漫画、有妖气等。
即,漫画的数据全来自于上述各大漫画网站。
源头找到了,如何从源头获取数据,就是一门值得深入讲解的话题了:
### **如何从漫画源头获取漫画?**
如何获取漫画,并不是移动端开发者能决定的。因为数据是存储在服务器的,服务器,说简单点,就是远程主机,也就是放在别人家的电脑。
我们各位开发者想通过APP,去访问别人家的电脑,远程主机里的数据,最重要的一点,你得遵循“别人家”的规矩——服务器提前定义好的数据格式。
直白一点,我以浏览器访问漫画网站为例子
1.打开浏览器
2.在地址栏键入http://www.tuku.cc 地址
3.浏览器根据这个地址,去下载了一个html文件,我们通过浏览器右键查看页面代码
![](images/079A84C6-3EC4-45B7-A337-989BB72FC30B.png)
4.html文件的本质,其实是“浏览器认识的代码”,:
![](images/2.png)
通过浏览html文件,我们发现这些html语法很有规律,有我们似曾相识的东西:
href=”http://...../img.jpg“
href的值就是漫画封面图片的地址,
title=“监狱学院”
title的值就是漫画的的标题。
这就是浏览器显示漫画源的原理:下载html文件,根据html中的标签元素,再去下载对应的图片,显示到标签上,image标签显示图片,普通标签,显示文字。
同理,我们有了这两个内容,就很能容易将其显示在漫画APP上,比如通过ImageVIew设置图片,通过TextView设置文本。
难点在于,如何像浏览器一样:下载html文件->解析html标签->根据标签里的内容,提取、下载数据->显示到屏幕上
在此次研究的漫画APP里,已经有html的解析工具,省去初学者研究Html解析的麻烦,也能够快速得从html文件提取类似漫画封面图片、漫画标题的内容。
注意,我们现在探讨的是“提取”,从html文件中提取我们需要的内容元素。
强调一点:提取的Html元素的过程依然很重要,但我们现在强调的是结果,即通过什么东西,可以拿到我们想要的数据。请看下一节:
### **从漫画源提取内容**
浏览器下载html文件,显示漫画内容的原理我们已经清楚了,
![](images/777D45F7-1EFE-49D2-B314-2A2C54E3ED99.png)
首先,我们在 根目录/app/cimo/source/目录下发现了大量的工具类,是作者专门用来提取html当中内容元素的。
仔细研究,我们可以看到,有十几个解析工具类,分别对应不同的漫画网站
![](images/48AC9B44-6B6D-4EAC-889D-2B7E2FA2F345.png)
cctukku 对应cc图库,chuiyao对应吹妖漫画,DM5对应动漫屋。以此类推
以cctuku文件为例,我们打开瞧瞧,其中的内容:
![](images/473A2CDF-B8DB-4771-B11F-FE1815707CF2.png)
markdown编辑器出了点问题,只能截图,不能上代码,辛苦各位凑合看了。
这个工具类(cctuku文件)由三部分组成
1. Request,返回值为Request的函数,创建了请求Html文件的请求对象,
2. URL,定义了请求目标的地址,意思是去请求哪个地方的Html文件,
3. pares系列的函数,定义了解析Html文件的方式,parseInfo()函数就可以返回Html中我们最关心的数据:漫画封面图片地址、漫画标题。
总结一下,这个工具类提供给我们**三个能力**:
1.远程下载Html文件的能力(像浏览器一样,把html文件下载到手机硬盘里)
2.下载指定漫画源地址的能力(要下载cc图库漫画的数据,而不是吹妖漫画的数据)
3.解析Html的能力(解析Html中的数据,获得我们关心的数据,进而显示到手机APP上)
这三个能力,是诸位最关心的,理解这三个能力对应函数的用法,就理解了,漫画数据源是如何显示到APP上的。
### 聪明、细心的读者可能会有下面的提问:
1.Html是如何下载到手机硬盘里的呢?
2.为什么通过返回值为Request的函数,比如getSerchRequest()函数或者getInfoRequest()函数,就可以下载Html文件呢?
3.为什么我在项目里没有看到漫画文件?
这些都是好问题,但需要大量的篇幅去讲解,先简单解答:
#### 1.Html是如何下载到手机硬盘里的呢?
本次研究的漫画APP项目,使用了网络请求框架——okhttp,okhttp最关键的一点,是需要传递Request对象,完成请求操作,我们在cctuku这个文件生成的Request的对象,传递给okhttp框架的时候,该框架,自动获取到了HTML文件的网络字节流,开发者再通过FIle操作,可以将字节流对应的HTML文件,保存到手机硬盘上。
请求HTML与请求漫画封面图片、请求漫画封面标题同理。
所以,要回答这个问题,必须解决okhttp框架的使用问题、FIle文件读写操作问题。限于篇幅以及文章主题相关性,我不会在本文讲解。会在稍后的章节中介绍,请耐心等待。
#### 2.Request对象有什么用
答:同问题1,okhttp框架需要Request对象,发起网络请求,下载对应远程主机的文件
#### 3.为什么我在项目里没有看到漫画文件?漫画APP显示的文件是来自于哪里?
答:第一次启动APP,APP会去远程主机下载漫画网站的HTML文件,接着通过解析HTML,下载漫画封面图片、标题等数据,下载到的数据,会直接显示到手机屏幕上;同时也会保存到手机硬盘里(这也是备份模块的原理),保存的形式有FIle文件、SQL文件等。