有人担忧编译时间问题,这里给出一个连接Kotlin VS Java:编译速度大比拼php
同步自wing的地方酒馆
本篇是kotlin开发Android系列教程的最后一篇。前面几篇介绍了kotlin的基本语法、与java的不一样之处等。在本篇文章中,将使用到前面的知识点,从零开发一款Gank.io 干活集中营App(感谢Gank提供的Api)。 该App彻底使用了Kotlin语言开发,基于MVP模式,并使用以下主流开源框架:java
除了以上主流库,还运用到了个人一个导航栏滑动隐藏库:android
该项目地址为GankClient-Kotlin ,若是你想学习Kotlin,那么这个项目应该会给予你很多的帮助。git
界面风格采用了MD风格,多数控件都是design包里的内容。主要实现了一个客户端该有的内容,界面交互,信息展现,数据获取等等。github
笔者已经将Kotlin运用在项目开发2个月了,期间不免有一些坑,可是在坑以外,是他带给个人快感,今后之后。用Kotlin写代码相较于Java彻底是一种享受。鉴于有些同窗没有看前面的文章,这里再简单介绍一下Kotlin。json
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,代码少了至少三倍。这简直是大快人心!
如今,假定你已经了解了Kotlin的基本用法,那么我将给你介绍这个客户端App的结构。
经过契约类Contract管理View Model Presenter接口(若是你项目写烦了MVP,那么安利下自动生成MVP代码的插件MVPHelper)。
Presenter -- View和Model交互的桥梁,两者经过Presenter创建联系。
主要流程以下: 用户与View交互,View得知用户须要加载数据,告知Presenter,Presenter则告知Model,Model拿到数据反交于Prsenter,Presenter将数据交给View进行展现。
偷一张老图:
项目中,主要进行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) 复制代码
主要用于网络访问。这些都是主流的库,使用方式与java相同(固然除了语法之外)
基于路由进行页面转发。能够解决多人多模块协做转跳的问题。
GankClientUri 定义一些路由规则、URI等
GankRouter 统一由此进行路由操做
用于json的解析操做。
用于图片的加载。
用于导航栏以及悬浮按钮滑动隐藏。
本客户端项目的地址:
github.com/githubwing/…
开源本客户端的缘由旨在让更多人了解Kotlin,接触Kotlin,从而使用Kotlin,实在是好东西不敢私藏。而且但愿经过Kotlin能认识更多志同道合的朋友们,一块儿讨论技术共同进步。
若是该项目能帮助到你学习Kotlin,那是最好不过的事情了。欢迎star.