告別Java。一起來使用kotlin開發完整客戶端

VJYTam 8年前發布 | 55K 次閱讀 Kotlin Java 安卓開發

必須寫在前面:從Java轉向Kotlin,只需要幾天時間!

本篇是kotlin開發Android系列教程的最后一篇。前面幾篇介紹了kotlin的基本語法、與java的不同之處等。在本篇文章中,將使用到前面的知識點,從零開發一款Gank.io 干活集中營App(感謝Gank提供的Api)。 該App完全使用了Kotlin語言開發,基于MVP模式,并使用如下主流開源框架:

除了以上主流庫,還運用到了我的一個導航欄滑動隱藏庫:

  • ByeBurger

    界面風格采用了MD風格,多數控件都是design包里的內容。主要實現了一個客戶端該有的內容,界面交互,信息展示,數據獲取等等。

筆者已經將Kotlin運用在項目開發2個月了,期間難免有一些坑,但是在坑之外,是他帶給我的 快感 ,從此以后。用Kotlin寫代碼相較于Java完全是一種享受。鑒于有些同學沒有看前面的文章,這里再簡單介紹一下Kotlin。

Kotlin是又一個基于JVM的語言,由JetBrains開發(你用的Android Studio就是他家的)。 如果你有java基礎,那么他上手極其容易。

除了無縫調用java(所有java類、java庫皆可不作任何處理的兼容)、一鍵將java轉為Kotlin、空指針安全這些特性,還有許多比Java屌的特性。下面舉一些栗子:

1.代碼量對比:

Java

TextView textView = findViewById(R.id.textView);

textView.setText("Hello World");</code></pre>

Kotlin

textView.text = "hello kotlin"

擴展函數簡單來說,就是將某個類不通過繼承動態擴展,來添加方法等,比如下面的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; }

}</code></pre>

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

用于導航欄以及懸浮按鈕滑動隱藏。

開源本客戶端的原因旨在讓更多人了解Kotlin,接觸Kotlin,從而使用Kotlin,實在是好東西不敢私藏。并且希望通過Kotlin能認識更多志同道合的朋友們,一起討論技術共同進步。

 

 

 本文由用戶 VJYTam 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!