告别Java。一起来使用kotlin开发完整客户端
<h2><strong>必须写在前面:从Java转向Kotlin,只需要几天时间!</strong></h2> <p>本篇是kotlin开发Android系列教程的最后一篇。前面几篇介绍了kotlin的基本语法、与java的不同之处等。在本篇文章中,将使用到前面的知识点,从零开发一款Gank.io 干活集中营App(感谢Gank提供的Api)。 该App完全使用了Kotlin语言开发,基于MVP模式,并使用如下主流开源框架:</p> <ul> <li><a href="/misc/goto?guid=4958868691958644224" rel="nofollow,noindex">Kotlin</a></li> <li><a href="/misc/goto?guid=4958864078712375065" rel="nofollow,noindex">Dagger2</a></li> <li><a href="/misc/goto?guid=4958865750209621132" rel="nofollow,noindex">Rxjava</a></li> <li>DataBinding</li> <li><a href="/misc/goto?guid=4958964956869128717" rel="nofollow,noindex">Retrofit</a></li> <li><a href="/misc/goto?guid=4958964956476581901" rel="nofollow,noindex">Okhttp3</a></li> <li><a href="/misc/goto?guid=4958961145273295585" rel="nofollow,noindex">DeepLinkDispatch</a></li> <li><a href="/misc/goto?guid=4958964956010997959" rel="nofollow,noindex">Gson</a></li> <li><a href="/misc/goto?guid=4958862736295244246" rel="nofollow,noindex">Glide</a></li> </ul> <p>除了以上主流库,还运用到了我的一个导航栏滑动隐藏库:</p> <ul> <li> <p>ByeBurger</p> <p>界面风格采用了MD风格,多数控件都是design包里的内容。主要实现了一个客户端该有的内容,界面交互,信息展示,数据获取等等。</p> </li> </ul> <p style="text-align:center"><img src="https://simg.open-open.com/show/e02f76e61fc479b50c6c5abd0dc46d41.png"> <img src="https://simg.open-open.com/show/5d47a58c994bdd9a7adf90b8f50c733c.png"></p> <p>笔者已经将Kotlin运用在项目开发2个月了,期间难免有一些坑,但是在坑之外,是他带给我的 <strong>快感</strong> ,从此以后。用Kotlin写代码相较于Java完全是一种享受。鉴于有些同学没有看前面的文章,这里再简单介绍一下Kotlin。</p> <p>Kotlin是又一个基于JVM的语言,由JetBrains开发(你用的Android Studio就是他家的)。 如果你有java基础,那么他上手极其容易。</p> <p>除了无缝调用java(所有java类、java库皆可不作任何处理的兼容)、一键将java转为Kotlin、空指针安全这些特性,还有许多比Java屌的特性。下面举一些栗子:</p> <p>1.代码量对比:</p> <p><strong>Java</strong></p> <pre> <code class="language-kotlin">TextView textView = findViewById(R.id.textView); textView.setText("Hello World");</code></pre> <p><strong>Kotlin</strong></p> <pre> <code class="language-kotlin">textView.text = "hello kotlin"</code></pre> <p>扩展函数简单来说,就是将某个类不通过继承动态扩展,来添加方法等,比如下面的toast就是扩展了Context类。</p> <p><strong>Java</strong></p> <pre> <code class="language-kotlin">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); } });</code></pre> <p><strong>Kotlin</strong></p> <pre> <code class="language-kotlin">button.setOnClickListener {toast("hello kotlin")}</code></pre> <p>POJO类(Java Bean对比)</p> <p><strong>java</strong></p> <pre> <code class="language-kotlin">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; } }</code></pre> <p>kotlin(不要被吓到,确实这么短!!)</p> <pre> <code class="language-kotlin">data class User(var name: String, var id: String)</code></pre> <h2><strong>栗子完毕</strong></h2> <p>相信看到上面的一些代码对比,大家心里已经比较清楚kotlin的特点了。相比java,代码少了至少三倍。这简直是大快人心!</p> <h2><strong>开发完整App客户端</strong></h2> <p>现在,假定你已经了解了Kotlin的基本用法,那么我将给你介绍这个客户端App的结构。</p> <h2><strong>MVP</strong></h2> <p>通过契约类Contract管理View Model Presenter接口(如果你项目写烦了MVP,那么安利下自动生成MVP代码的插件 <a href="/misc/goto?guid=4959722059157716651" rel="nofollow,noindex">MVPHelper</a> )。</p> <ul> <li>Model — 主要处理业务,用于数据的获取(如网络、本地缓存)。</li> <li>View — 用于把数据展示,并且提供交互。</li> <li>Presenter — View和Model交互的桥梁,二者通过Presenter建立联系。</li> </ul> <p>主要流程如下: 用户与View交互,View得知用户需要加载数据,告知Presenter,Presenter则告知Model,Model拿到数据反交于Prsenter,Presenter将数据交给View进行展示。</p> <p>偷一张老图:</p> <p style="text-align:center"><img src="https://simg.open-open.com/show/8eaa3978f4b708390dd118f58e880a0c.png"></p> <h2><strong>Dagger2</strong></h2> <p>项目中,主要进行presenter、model、retrofit Api等类的注入操作。这里不做详细Dagger2用法解释,还不太会的同学可以先去拜读下大神的教程。Dagger2在Kotlin中使用有一些配置是不一样的,详细配置请看 <strong>项目源码</strong> 。</p> <p>ApiComponent</p> <p>主Component、用于注入AppComponent、便于提供子Component依赖。</p> <p>依赖于:</p> <p>1.ApiModule(提供okhttpClient、Retrofit、Api等)</p> <p>2.AppModule(提供context对象(okhttp拦截器所需))</p> <p>FuckGoodsComponent</p> <p>父Component为ApiComponent 用于注入FuckGoodsPresenter</p> <p>依赖于: FuckGoodsModule(提供FuckGoodsView)</p> <p>RandomComponent</p> <p>父Component为ApiComponent 用于注入RandomPresenter</p> <p>依赖于 : RandomModule(提供RandomView)</p> <h2><strong>Rxjava + Retrofit + okhttp3</strong></h2> <p>主要用于网络访问。这些都是主流的库,使用方式与java相同(当然除了语法以外)</p> <h2><strong>DeepLinkDispatch</strong></h2> <p>基于路由进行页面转发。可以解决多人多模块协作转跳的问题。</p> <p>GankClientUri定义一些路由规则、URI等</p> <p>GankRouter统一由此进行路由操作</p> <h2><strong>GSON</strong></h2> <p>用于json的解析操作。</p> <h2><strong>Glide</strong></h2> <p>用于图片的加载。</p> <h2><strong>ByeBurGer</strong></h2> <p>用于导航栏以及悬浮按钮滑动隐藏。</p> <p>开源本客户端的原因旨在让更多人了解Kotlin,接触Kotlin,从而使用Kotlin,实在是好东西不敢私藏。并且希望通过Kotlin能认识更多志同道合的朋友们,一起讨论技术共同进步。</p> <p> </p> <p> </p>
本文由用户 VJYTam 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
转载本站原创文章,请注明出处,并保留原始链接、图片水印。
本站是一个以用户分享为主的开源技术平台,欢迎各类分享!