技术控

    今日:0| 主题:63445
收藏本版 (1)
最新软件应用技术尽在掌握

[其他] 爽翻天!告别Java。一起来使用kotlin开发完整客户端

[复制链接]
腻了你会走吗? 发表于 2016-11-28 06:45:03
258 3
必须写在前面:从Java转向Kotlin,只需要几天时间!

  本篇是kotlin开发Android系列教程的最后一篇。前面几篇介绍了kotlin的基本语法、与java的不同之处等。在本篇文章中,将使用到前面的知识点,从零开发一款Gank.io 干活集中营App(感谢Gank提供的Api)。 该App完全使用了Kotlin语言开发,基于MVP模式,并使用如下主流开源框架:
  
       
  • Kotlin   
  • Dagger2   
  • Rxjava   
  • DataBinding   
  • Retrofit   
  • Okhttp3   
  • DeepLinkDispatch   
  • Gson   
  • Glide  
  除了以上主流库,还运用到了我的一个导航栏滑动隐藏库:
  
       
  •   ByeBurger
      该项目地址为 GankClient-Kotlin ,如果你想学习Kotlin,那么这个项目应该会给予你不少的帮助。
      
     界面风格采用了MD风格,多数控件都是design包里的内容。主要实现了一个客户端该有的内容,界面交互,信息展示,数据获取等等。
   

爽翻天!告别Java。一起来使用kotlin开发完整客户端

爽翻天!告别Java。一起来使用kotlin开发完整客户端
   

爽翻天!告别Java。一起来使用kotlin开发完整客户端

爽翻天!告别Java。一起来使用kotlin开发完整客户端
     笔者已经将Kotlin运用在项目开发2个月了,期间难免有一些坑,但是在坑之外,是他带给我的 快感 ,从此以后。用Kotlin写代码相较于Java完全是一种享受。鉴于有些同学没有看前面的文章,这里再简单介绍一下Kotlin。
  Kotlin是又一个基于JVM的语言,由JetBrains开发(你用的Android Studio就是他家的)。 如果你有java基础,那么他上手极其容易。
  除了无缝调用java(所有java类、java库皆可不作任何处理的兼容)、一键将java转为Kotlin、空指针安全这些特性,还有许多比Java屌的特性。下面举一些栗子:
   1.代码量对比( 参考 使用Kotlin开发Android(一) ):
  Java

  1. TextView textView = findViewById(R.id.textView);
  2. textView.setText("Hello World");
复制代码
Kotlin

  1. textView.text = "hello kotlin"
复制代码
  下面是 扩展函数 展示,参考 使用Kotlin开发Android(二)
  扩展函数简单来说,就是将某个类不通过继承动态扩展,来添加方法等,比如下面的toast就是扩展了Context类。
  Java

  1. Button button = findviewbyid(R.id.button)
  2. button.setOnClickListener(new View.OnClickListener() {
  3. @Override public void onClick(View v) {
  4. Toast.makeText(this,"hello java",Toast.LENGTH_SHORT);
  5. }
  6. });
复制代码
Kotlin

  1. button.setOnClickListener {toast("hello kotlin")}
复制代码
POJO类(Java Bean对比)
  java

  1. public class User {
  2. private String name;
  3. private String id;
  4. public User(String name, String id) {
  5. this.name = name;
  6. this.id = id;
  7. }
  8. public String getName() {
  9. return name;
  10. }
  11. public void setName(String name) {
  12. this.name = name;
  13. }
  14. public String getId() {
  15. return id;
  16. }
  17. public void setId(String id) {
  18. this.id = id;
  19. }
  20. }
复制代码
  kotlin(不要被吓到,确实这么短!!)
  1. 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进行展示。
  偷一张老图:
   

爽翻天!告别Java。一起来使用kotlin开发完整客户端

爽翻天!告别Java。一起来使用kotlin开发完整客户端

  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.
雨梅 发表于 2016-11-29 02:38:19
啊啊啊啊啊啊啊啊啊啊啊
回复 支持 反对

使用道具 举报

ddmmymm 发表于 2016-12-13 12:06:05
因为谦卑,所以高贵.因为懂得,所以慈悲;因为陌生,所以勇敢,因为距离,所以美丽.
回复 支持 反对

使用道具 举报

天蝎座_HnEP2 发表于 2016-12-19 05:19:47
我就是来看帖子的,楼主英明啊!
回复 支持 反对

使用道具 举报

我要投稿

推荐阅读


回页顶回复上一篇下一篇回列表
手机版/c.CoLaBug.com ( 粤ICP备05003221号 | 粤公网安备 44010402000842号 )

© 2001-2017 Comsenz Inc.

返回顶部 返回列表