必须写在前面:从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. monogodb3.4安装修改,权限设置

    下载地址:https://www.mongodb.com/download-center#community 这里的方法只对应3.4,别的有没有效果请自行判断. 下载后按默认下一步. 默认安装地址  ...

  2. 前端之旅HTML与CSS篇之block与inline的区别

    display:block;和display:inline;的区别block元素特点: 1)处于常规流中时,如果width没有设置,会自动填充满父容器 2)可以应用margin/padding 3)在 ...

  3. Java网络编程基础(Netty预备知识)

    今天在家休息,闲来无事,写篇博客,陶冶下情操~~~ =================我是分割线================ 最近在重新学习Java网络编程基础,以便后续进行Netty的学习. 整 ...

  4. [LeetCode] Largest Palindrome Product 最大回文串乘积

    Find the largest palindrome made from the product of two n-digit numbers. Since the result could be ...

  5. Random Forest vs GradientBoostingDecisionTree

    相同 随机森林和GBDT都属于集成算法,base model都是决策树. 不同 随机森林 随机森林是决策树的bagging. bagging通过重复对原训练数据集上进行有放回地采样生成的数据集用bas ...

  6. ssh爆破(python脚本)

    最近在乌云看到一份端口详解:为了锻炼自己,按照端口详解写脚本 #!/usr/local/bin/ python # -*- coding: UTF-8 -*- __author__ = 'yangxi ...

  7. jdk1.7中的常量池

    在探究jdk1.7中的常量池,我们可以先看看以下的这段代码 public static void main(String[] args) throws Throwable { List<Stri ...

  8. [AHOI2009]中国象棋

    题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法.大家肯定很清楚,在中国象棋中炮的行走方式是 ...

  9. 51Nod 1125 交换机器的最小代价

    题目描述: 有N台机器重量各不相等,现在要求把这些机器按照重量排序,重量从左到右依次递增.移动机器只能做交换操作,但交换机器要花费一定的费用,费用的大小就是交换机器重量的和.例如:3 2 1,交换1 ...

  10. 【The Time Traveller's Wife】

    After reading The Time Traveller's Wife:      It's a tragedy,I think.But it's mixed with hope.Henry ...