必须写在前面:从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开发完整客户端的更多相关文章

  1. 让你的代码量减少3倍!使用kotlin开发Android(三) 缩短五倍的Java Bean

    回顾一下 哈,没想到你已经坚持不懈看到第三篇了,不错哈~坚持就是胜利. 本文同步自博主的私人博客wing的地方酒馆 在上一篇文章中,我们介绍了扩展函数,这里对上一篇进行一点小小的补充. 还记得text ...

  2. 弧形菜单2(动画渐入)Kotlin开发(附带java源码)

    弧形菜单2(动画渐入+Kotlin开发) 前言:基于AndroidStudio的采用Kotlin语言开发的动画渐入的弧形菜单...... 效果: 开发环境:AndroidStudio2.2.1+gra ...

  3. gradle 混合编程java、scala、kotlin、groovy

    众所周知,java是基于JVM的开发语言,但能够在JVM上运行的开发语言不仅仅有java,目前还有很热门的kotlin(kotlin不仅仅只能开发Android).scala.groovy等等.目前国 ...

  4. 让你的代码量减少3倍!使用kotlin开发Android(一)

    让你的代码量减少3倍!使用kotlin开发Android(一) 创建Kotlin工程 本文同步自博主的私人博客:wing的地方酒馆 写在前面 使用kotlin开发android已经两周多了.得到的好处 ...

  5. KOTLIN开发语言文档(官方文档) -- 2.基本概念

    网页链接:https://kotlinlang.org/docs/reference/basic-types.html 2.   基本概念 2.1.  基本类型 从可以在任何变量处理调用成员函数和属性 ...

  6. KOTLIN开发语言文档(官方文档) -- 入门

    网页链接:https://kotlinlang.org/docs/reference/basic-syntax.html 1.   入门 1.1.  基本语法 1.1.1.   定义包 包说明应该在源 ...

  7. 用Kotlin开发Android应用(II):创建新项目

    这是关于Kotlin的第二篇.各位高手发现问题,请继续“拍砖”. 原文标题:Kotlin for Android(II): Create a new project 原文链接:http://anton ...

  8. 用Kotlin开发Android应用(I):介绍

    关于Kotlin,网上已有一些介绍的文章,包括Antonio Leiva的这组blog翻译稿.不过,我还是想跟进它们.翻译它们,以锻炼自己的英文翻译.各位高手发现问题,请及时“拍砖”. 原文题目:Ko ...

  9. 使用Kotlin开发Android应用(I):简单介绍

    使用Kotlin开发Android应用(I):简单介绍 @author ASCE1885的 Github 简书 微博 CSDN 原文链接 Kotlin是一门基于JVM的编程语言.它正成长为Androi ...

随机推荐

  1. Spring源码情操陶冶-任务定时器ConcurrentTaskScheduler

    承接前文Spring源码情操陶冶#task:scheduled-tasks解析器,本文在前文的基础上讲解单核心线程线程池的工作原理 应用附例 承接前文的例子,如下 <!--define bean ...

  2. JS面向对象特性和值类型与复合类型

      JS面向对象之特性已经值类型与复合类型 一些属性 空对象 空对象也是对象, 只是有存变量的变量名, 没有对象属性 var o ={}; 参数传递 值类型: 函数内外两个变量, 两个数据, 都不相同 ...

  3. 关于OpenAuth.Net被攻击的感想

    距离上次写博客应该是1年多以前的事情了,看过我博客的人都知道,我从来不在博客园发技术无关的贴子,除了上次离职.但这次我是实在忍不住了. 今天我个人开源项目OpenAuth.Net发布了最新版(有兴趣戳 ...

  4. SpringMVC的流程分析(二)—— HandlerMapping组件

    1.HandlerMapping的类结构 如上图所示,HandlerMapping接口有一个叫做:getHandler()的方法,这个方法是用来回去HandlerMapping对应的处理器的,由此也就 ...

  5. spring加载xml的六种方式

    因为目前正在从事一个项目,项目中一个需求就是所有的功能都是插件的形式装入系统,这就需要利用Spring去动态加载某一位置下的配置文件,所以就总结了下Spring中加载xml配置文件的方式,我总结的有6 ...

  6. JSONObject和JSONArray区别及基本用法

    一.JSONObject和JSONArray的数据表示形式 JSONObject的数据是用 {  } 来表示的, 例如:   { "id" : "123", & ...

  7. 【阿里聚安全·安全周刊】互联网时代人类还有被遗忘的权利吗 | Android与中兴

    本周七个关键词:互联网时代丨中兴和Android丨安卓厂商和安全补丁丨移动支付安全丨泰国移动运营商泄密丨格式化硬盘的恶意程序丨代码签名滥用 -1-   [互联网] 互联网时代 人类还有被遗忘的权利吗 ...

  8. [SHOI 2008]Debt 循环的债务

    Description 题库链接 A 欠 B \(x_1\) 元, B 欠 C \(x_2\) 元, C 欠 A \(x_3\) 元.现每人手上各有若干张 100,50,20,10,5,1 钞票.问至 ...

  9. 【LSGDOJ 1852】青蛙的烦恼 DP

    题目描述 池塘中有n片荷叶恰好围成了一个凸多边形,有一只小青蛙恰好站在1号荷叶上,小青蛙想通过最短的路程遍历所有的荷叶(经过一个荷叶一次且仅一次),小青蛙可以从一片荷叶上跳到另外任意一片荷叶上. 输入 ...

  10. bzoj 4974: 字符串大师

    Description 一个串T是S的循环节,当且仅当存在正整数k,使得S是T^k(即T重复k次)的前缀,比如abcd是abcdabcdab的循环节 .给定一个长度为n的仅由小写字符构成的字符串S,请 ...