爽翻天!告别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.
爽翻天!告别Java。一起来使用kotlin开发完整客户端的更多相关文章
- 让你的代码量减少3倍!使用kotlin开发Android(三) 缩短五倍的Java Bean
回顾一下 哈,没想到你已经坚持不懈看到第三篇了,不错哈~坚持就是胜利. 本文同步自博主的私人博客wing的地方酒馆 在上一篇文章中,我们介绍了扩展函数,这里对上一篇进行一点小小的补充. 还记得text ...
- 弧形菜单2(动画渐入)Kotlin开发(附带java源码)
弧形菜单2(动画渐入+Kotlin开发) 前言:基于AndroidStudio的采用Kotlin语言开发的动画渐入的弧形菜单...... 效果: 开发环境:AndroidStudio2.2.1+gra ...
- gradle 混合编程java、scala、kotlin、groovy
众所周知,java是基于JVM的开发语言,但能够在JVM上运行的开发语言不仅仅有java,目前还有很热门的kotlin(kotlin不仅仅只能开发Android).scala.groovy等等.目前国 ...
- 让你的代码量减少3倍!使用kotlin开发Android(一)
让你的代码量减少3倍!使用kotlin开发Android(一) 创建Kotlin工程 本文同步自博主的私人博客:wing的地方酒馆 写在前面 使用kotlin开发android已经两周多了.得到的好处 ...
- KOTLIN开发语言文档(官方文档) -- 2.基本概念
网页链接:https://kotlinlang.org/docs/reference/basic-types.html 2. 基本概念 2.1. 基本类型 从可以在任何变量处理调用成员函数和属性 ...
- KOTLIN开发语言文档(官方文档) -- 入门
网页链接:https://kotlinlang.org/docs/reference/basic-syntax.html 1. 入门 1.1. 基本语法 1.1.1. 定义包 包说明应该在源 ...
- 用Kotlin开发Android应用(II):创建新项目
这是关于Kotlin的第二篇.各位高手发现问题,请继续“拍砖”. 原文标题:Kotlin for Android(II): Create a new project 原文链接:http://anton ...
- 用Kotlin开发Android应用(I):介绍
关于Kotlin,网上已有一些介绍的文章,包括Antonio Leiva的这组blog翻译稿.不过,我还是想跟进它们.翻译它们,以锻炼自己的英文翻译.各位高手发现问题,请及时“拍砖”. 原文题目:Ko ...
- 使用Kotlin开发Android应用(I):简单介绍
使用Kotlin开发Android应用(I):简单介绍 @author ASCE1885的 Github 简书 微博 CSDN 原文链接 Kotlin是一门基于JVM的编程语言.它正成长为Androi ...
随机推荐
- POJ-1122 FDNY to the Rescue!---Dijkstra+反向建图
题目链接: https://vjudge.net/problem/POJ-1122 题目大意: 给出矩阵,矩阵中每个元素tij表示从第i个交叉路口到第j个交叉路口所需时间,若tij为-1则表示两交叉路 ...
- ZOJ-2750 Idiomatic Phrases Game---Dijk最短路
题目链接: https://vjudge.net/problem/ZOJ-2750 题目大意: 给定一本字典,字典里有很多成语,要求从字典里的第一个成语开始,运用字典里的成语变到最后一个成语,变得过程 ...
- Batch训练的反向传播过程
Batch训练的反向传播过程 本文试图通过Softmax理解Batch训练的反向传播过程 采用的网络包含一层全连接和一层softmax,具体网络如下图所示: 交叉熵成本函数: \[L = - \fra ...
- 利用typescript生成Swagger文档
项目地址:https://github.com/wz2cool/swagger-ts-doc demo代码地址:https://github.com/wz2cool/swagger-ts-doc-de ...
- springaop问题——Cannot subclass final class org.springframework.boot.autoconfigure.AutoConfigurationPackages$BasePackages
问题描述: 在使用springaop对目标对象增强时,若切点的条件过于宽泛就会出现以下异常! 如: @Before("execution(* *(..))") @Before(&q ...
- 空间搜索(圆范围)中Geohash编码方案和网格编码方案对比探讨
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 多个项目中实现范围(圆)搜索的方案为:依赖库表中的X和Y字段构 ...
- java制作验证码(java验证码小程序)
手动制作java的验证码 Web应用验证码的组成: (1)输入框 (2)显示验证码的图片 验证码的制作流程: 生成验证码的容器使用 j2ee的servlet 生成图片需要的类: (1) Buffere ...
- 为了异常安全(swap,share_ptr)——Effecive C++
互斥锁: 假设我们要在多线程中实现背景图片的控制: class PrettyMenu{ public: -- void changeBackground(std::istream& imgSr ...
- hdu 5893 (树链剖分+合并)
List wants to travel Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/O ...
- ●UOJ 131 [NOI2015] 品酒大会
题链: http://uoj.ac/problem/131 题解: 网上大多数的方法都是用并查集维护.这里呢,给出另一种自己YY的解法(但实际上本质差不多吧): 后缀数组,RMQ,单调栈 1).预处理 ...