【紙飛機(PaperPlane)IMITATE版】知識點整理

一個暱稱而已T發表於2017-04-18

特別宣告:本專案仿照自如何用一週時間開發一款Android APP並在Google Play上線 ,專案僅供學習交流使用。


花了半個月的時間,終於跟著黎趙太郎 大神的步伐把自己的紙飛機給“折”好了。咻~成功起航!

本專案地址:https://github.com/374901588(喜歡可以star一波哦~)


本篇文章只是對本人所開發的紙飛機APP進行知識點的整理,以及原專案大體實現思路的整理。不喜勿噴。


1、原專案大體實現思路:

首先是從網路上請求新聞的列表,請求成功後,會開啟後臺服務去請求新聞對應的詳細內容,同時快取到本地。


2、仿照紙飛機知識點整理:

(與原專案相同的地方)
1. 整體架構參照原作者的採用MVP模式
2. Material designd控制元件的使用
3. Chrome Custom Tabs與WebView的使用
4. Glide圖片載入框架的使用
5. 為了保持在低版本SDK中的UI一致性,引入material data time picker庫
6. Android 7.1新特性App Shortcuts的引入
7. 原生設定介面PreferenceScreen的運用

(仿照版本修改的地方)
8. 對於資料的網路請求,用Retrofit2代替了Volley
9. 採用LitePal資料庫框架代替了原本的SQLite
10. 某些邏輯運用了RxJava、RxAndroid
11. 運用Lambda表示式簡化程式碼
12. 使用Data Binding簡化邏輯


3、在原專案基礎的改動&改善

  1. 對於顯示新聞列表的Adapter進行了處理,將裡面設計的各種ViewHolder單獨提取了出來,減少了重複程式碼的出現

  2. 解決切換主題總是直接顯示MainFragment的問題(原專案中在收藏介面點選切換主題時,在切換主題後會直接顯示首頁介面)

  3. 從收藏介面進入文章詳細介面,把該文章的收藏取消,再返回收藏介面會實時重新整理收藏列表(原專案需要手動重新整理才能去掉前文取消收藏的文章)

  4. 簡化了設定和關於介面的實現邏輯(由於這兩個介面比較簡單,就沒有使用MVP模式)

  5. 原專案在正常情況下請求到了新聞列表後會開啟一個後臺服務將對應的詳細內容也快取到本地資料庫,但是之後在進入詳細介面時會先從網路獲取,如果沒有網路才會從本地獲取,那麼這就會導致一個問題,如果在後臺服務獲取詳細內容失敗時,那麼以後想要檢視獲取失敗時的內容,只能在有網的情況下才能正常檢視,無網路時是無法進行的。所以我修改了一下邏輯,進入詳細內容介面時先從本地獲取資料,如果本地沒有成功的快取有,在通過網路獲取,獲取成功的同時也會快取到本地,這樣就能避免上述的特殊情況,且能夠節省使用者流量。

  6. 修復了在進入應用時沒有快取有本地資料且沒有網路的情況下(如第一次進入應用且沒有網路)出現奔潰的情況。

原因出在DoubanMomentFragment第一次進入時因為沒網DoubanMomentFragment會彈出一個SnackBar,(該SnackBar是相對於RefreshLayout顯示的),但是在fragment_liset佈局中缺少父佈局CoordinatorLayout,而SnackBar所依賴的view又要在以CoordinatorLayout作為直接父佈局,所以會導致異常:java.lang.IllegalArgumentException: No suitable parent found from the given view. Please provide a valid view.從而奔潰。

相關文章