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

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

本篇是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

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


本客戶端項目的地址:
https://github.com/githubwing/GankClient-Kotlin

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

如果該項目能幫助到你學習Kotlin,那是最好不過的事情了。歡迎star.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章