本文會講解哪些內容
1.APP顯示的漫畫數據,是從哪里來的?
2.如何將漫畫數據顯示到APP上?
3.在顯示漫畫數據的過程中,有哪些比較有**技術含量**的知識點?(面試、答辯值得向人講一講)
## **漫畫源**
### **什么是漫畫源?**
漫畫源指的是漫畫數據的源頭,即漫畫APP顯示的主體內容。源頭,即強調來自于哪里。
作為軟件開發者,自己很少有創作漫畫的時間和能力,因此,我們必須借助百度,搜索熱門的漫畫網站:
打開百度——搜索漫畫——選則一款或多款漫畫站點——進行研究
此APP的漫畫源頭,已經兼容了8個漫畫網站,包括CC圖庫、動漫屋、可汗動漫、看漫畫、有妖氣等。
即,漫畫的數據全來自于上述各大漫畫網站。
源頭找到了,如何從源頭獲取數據,就是一門值得深入講解的話題了:
### **如何從漫畫源頭獲取漫畫?**
如何獲取漫畫,并不是移動端開發者能決定的。因為數據是存儲在服務器的,服務器,說簡單點,就是遠程主機,也就是放在別人家的電腦。
我們各位開發者想通過APP,去訪問別人家的電腦,遠程主機里的數據,最重要的一點,你得遵循“別人家”的規矩——服務器提前定義好的數據格式。
直白一點,我以瀏覽器訪問漫畫網站為例子
1.打開瀏覽器
2.在地址欄鍵入http://www.tuku.cc 地址
3.瀏覽器根據這個地址,去下載了一個html文件,我們通過瀏覽器右鍵查看頁面代碼

4.html文件的本質,其實是“瀏覽器認識的代碼”,:

通過瀏覽html文件,我們發現這些html語法很有規律,有我們似曾相識的東西:
href=”http://...../img.jpg“
href的值就是漫畫封面圖片的地址,
title=“監獄學院”
title的值就是漫畫的的標題。
這就是瀏覽器顯示漫畫源的原理:下載html文件,根據html中的標簽元素,再去下載對應的圖片,顯示到標簽上,image標簽顯示圖片,普通標簽,顯示文字。
同理,我們有了這兩個內容,就很能容易將其顯示在漫畫APP上,比如通過ImageVIew設置圖片,通過TextView設置文本。
難點在于,如何像瀏覽器一樣:下載html文件->解析html標簽->根據標簽里的內容,提取、下載數據->顯示到屏幕上
在此次研究的漫畫APP里,已經有html的解析工具,省去初學者研究Html解析的麻煩,也能夠快速得從html文件提取類似漫畫封面圖片、漫畫標題的內容。
注意,我們現在探討的是“提取”,從html文件中提取我們需要的內容元素。
強調一點:提取的Html元素的過程依然很重要,但我們現在強調的是結果,即通過什么東西,可以拿到我們想要的數據。請看下一節:
### **從漫畫源提取內容**
瀏覽器下載html文件,顯示漫畫內容的原理我們已經清楚了,

首先,我們在 根目錄/app/cimo/source/目錄下發現了大量的工具類,是作者專門用來提取html當中內容元素的。
仔細研究,我們可以看到,有十幾個解析工具類,分別對應不同的漫畫網站

cctukku 對應cc圖庫,chuiyao對應吹妖漫畫,DM5對應動漫屋。以此類推
以cctuku文件為例,我們打開瞧瞧,其中的內容:

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文件等。