必須寫在前面:從Java轉向Kotlin,只需要幾天時間!
有人擔心編譯時間問題,這裡給出一個連結Kotlin VS Java:編譯速度大比拼
同步自wing的地方酒館
本篇是kotlin開發Android系列教程的最後一篇。前面幾篇介紹了kotlin的基本語法、與java的不同之處等。在本篇文章中,將使用到前面的知識點,從零開發一款Gank.io 幹活集中營App(感謝Gank提供的Api)。 該App完全使用了Kotlin語言開發,基於MVP模式,並使用如下主流開源框架:
除了以上主流庫,還運用到了我的一個導航欄滑動隱藏庫:
該專案地址為GankClient-Kotlin ,如果你想學習Kotlin,那麼這個專案應該會給予你不少的幫助。
介面風格採用了MD風格,多數控制元件都是design包裡的內容。主要實現了一個客戶端該有的內容,介面互動,資訊展示,資料獲取等等。
筆者已經將Kotlin運用在專案開發2個月了,期間難免有一些坑,但是在坑之外,是他帶給我的快感,從此以後。用Kotlin寫程式碼相較於Java完全是一種享受。鑑於有些同學沒有看前面的文章,這裡再簡單介紹一下Kotlin。
Kotlin是又一個基於JVM的語言,由JetBrains開發(你用的Android Studio就是他家的)。 如果你有java基礎,那麼他上手極其容易。
除了無縫呼叫java(所有java類、java庫皆可不作任何處理的相容)、一鍵將java轉為Kotlin、空指標安全這些特性,還有許多比Java屌的特性。下面舉一些栗子:
1.程式碼量對比( 參考使用Kotlin開發Android(一)):
Java
TextView textView = findViewById(R.id.textView);
textView.setText("Hello World");複製程式碼
Kotlin
textView.text = "hello kotlin"複製程式碼
下面是擴充套件函式展示,參考使用Kotlin開發Android(二)
擴充套件函式簡單來說,就是將某個類不通過繼承動態擴充套件,來新增方法等,比如下面的toast就是擴充套件了Context類。
Java
Button button = findviewbyid(R.id.button)
button.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
Toast.makeText(this,"hello java",Toast.LENGTH_SHORT);
}
});複製程式碼
Kotlin
button.setOnClickListener {toast("hello kotlin")}複製程式碼
POJO類(Java Bean對比)
java
public class User {
private String name;
private String id;
public User(String name, String id) {
this.name = name;
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}複製程式碼
kotlin (不要被嚇到,確實這麼短!!)
data class User(var name: String, var id: String)複製程式碼
栗子完畢
相信看到上面的一些程式碼對比,大家心裡已經比較清楚kotlin的特點了。相比java,程式碼少了至少三倍。這簡直是大快人心!
開發完整App客戶端
現在,假定你已經瞭解了Kotlin的基本用法,那麼我將給你介紹這個客戶端App的結構。
MVP
通過契約類Contract管理View Model Presenter介面(如果你專案寫煩了MVP,那麼安利下自動生成MVP程式碼的外掛MVPHelper)。
- Model -- 主要處理業務,用於資料的獲取(如網路、本地快取)。
- View -- 用於把資料展示,並且提供互動。
Presenter -- View和Model互動的橋樑,二者通過Presenter建立聯絡。
主要流程如下: 使用者與View互動,View得知使用者需要載入資料,告知Presenter,Presenter則告知Model,Model拿到資料反交於Prsenter,Presenter將資料交給View進行展示。
偷一張老圖:
Dagger2
專案中,主要進行presenter、model、retrofit Api等類的注入操作。這裡不做詳細Dagger2用法解釋,還不太會的同學可以先去拜讀下大神的教程。Dagger2在Kotlin中使用有一些配置是不一樣的,詳細配置請看專案原始碼。
ApiComponent
主Component、用於注入AppComponent、便於提供子Component依賴。
依賴於:
1.ApiModule(提供okhttpClient、Retrofit、Api等)
2.AppModule(提供context物件(okhttp攔截器所需))複製程式碼
FuckGoodsComponent
父Component為ApiComponent 用於注入FuckGoodsPresenter
依賴於: FuckGoodsModule(提供FuckGoodsView)複製程式碼
RandomComponent
父Component為ApiComponent 用於注入RandomPresenter
依賴於 : RandomModule(提供RandomView) 複製程式碼
Rxjava + Retrofit + okhttp3
主要用於網路訪問。這些都是主流的庫,使用方式與java相同(當然除了語法以外)
DeepLinkDispatch
基於路由進行頁面轉發。可以解決多人多模組協作轉跳的問題。
GankClientUri 定義一些路由規則、URI等
GankRouter 統一由此進行路由操作
GSON
用於json的解析操作。
Glide
用於圖片的載入。
ByeBurGer
用於導航欄以及懸浮按鈕滑動隱藏。
本客戶端專案的地址:
github.com/githubwing/…
開源本客戶端的原因旨在讓更多人瞭解Kotlin,接觸Kotlin,從而使用Kotlin,實在是好東西不敢私藏。並且希望通過Kotlin能認識更多志同道合的朋友們,一起討論技術共同進步。
如果該專案能幫助到你學習Kotlin,那是最好不過的事情了。歡迎star.