代码的世界不需要睡觉

绝大部分的人学完Kotlin的一些基础之后,会感觉很不知所措,不知道接下来要学的是什么,这里为大家介绍以下Kotlin的主流技术



☞MVP框架

MVP代表Model,View和Presenter。

View :负责视图部分展示、视图事件处理。Activity、Fragment、Dialog、ViewGroup等呈现视图的组件都可以承担该角色。

Model:负责数据的请求、解析、过滤等数据层的操作。

Presenter:View和Model交互的桥梁。

基于MVP架构的模式之一

高层接口不能,不应该,并且必须不了解底层接口的细节,是(面向)抽象的,并且是细节隐藏。外圆是实现机制,内圆是核心策略。

AnKo

Anko主要的目的是用来替代以前XML的方式来使用代码生成UI布局。

如何使用AnKo呢?

一个Anko扩展函数可以被用来简化获取一个RecyclerView

//原始的写法

//val mRecyclerView = findViewById(R.id.person_list) as RecyclerView

//使用Anko扩展函数

val mRecyclerView: RecyclerView = find(R.id.person_list)

扩展函数

扩展函数是指在一个类上增加一种新的行为,Kotlin中扩展函数的一个优势是我们不需要在调用方法的时候把整个对象当作参数传入。

举个例子,我们可以创建一个toast函数,这个函数不需要传入任何context,它可以被任何Context或者它的子类调用,比如Activity或者Service:

fun Context.toast(message: CharSequence,duration: Int = Toast.LENGTH_SHORT){        Toast.makeText(this,message,duration).show()    }

这个方法可以在Activity内部直接调用:

toast("Hello World")toast("Hello world",Toast.LENGTH_LONG)

Anko提供了一些针对CharSequence和resource的函数,还有两个不同的toast和longToast方法:

toast("hello world!")       

longToast(R.string.app_name)


Glide

Android在使用图片的时候是相当麻烦的,因为需要一个像素一个像素地加载这些图片到内存。如果你这时候使用了一个像Glide一样经过不断优化和严格测试的图片处理库,你会庆幸你节省了大量的时间。

添加Glide到AndroidStudio项目中

和大多数依赖库一样,在Gradle项目中只需要在build.gradle中添加一行:(可直接copy)

compile 'com.github.bumptech.glide:glide:3.7.0'

常见设置    

placeholder() 占位图片

error() 加载失败

crossFade()淡入淡出

dontAnimate()无动画效果

override()调整图片大小

transform()自定义图形转换

skipMemoryCache(true)不做内存缓存

diskCacheStrategy(DiskCacheStrategy.ALL)磁盘缓存

DiskCacheStrategy.ALL 缓存所有版本的图片

DiskCacheStrategy.NONE 不缓存任何图片

DiskCacheStrategy.SOURCE 只缓存全分辨率的图像

DiskCacheStrategy.RESULT 只缓存经过处理的图片


Rxkotlin

RxKotlin :一个在JVM上使用可观测的序列来组成异步的、基于事件的程序的库。

下列是用java 和 kotlin 写的例子:读取一组文件夹中png格式的图片,并在UI界面上进行相应的处理操作。

(Java版)


(Kotlin版)

是不是感觉瞬间逻辑上就变得清晰了起来?这就是我为什么推崇kotlin和响应式编程的理由。、


RxAndroid

Android 是一个让你开始响应式编程的好地方。RxAndroid 使这一切更加简单,它将异步 UI 事件封装得更像 RxJava,RxAndroid是RxJava的一个针对

Android

平台的扩展,主要用于 Android 开发。 

对于android开发者来说,只需要在build.gradle文件中加入下面的代码就可以了:

compile 'io.reactivex:rxandroid:1.2.0'

compile 'io.reactivex:rxjava:1.1.5'


RxBus

RxBus是以observable 与 Subscriber 实现的,正常注册订阅所传递的参数我们都是可以传递的。在项目中我们不例外的都是 Activity、Fragment 互相与各自间的传递 String Object!

RxBus.getInstance().post(AppConstant.CHANNEL_SWAP,new ChannelItemMoveEvent(fromPosition, toPosition));

是不是感觉很方便,一步post掉任何Object与String的参数。


Retrofit+Dagger2

Dagger2:依赖注入框架,用来解决依赖 除了基本依赖 mvp的V–>P–>M的之间依赖也轻松解决 方便不少。

Retrofit:用来解决M的RestApi数据获取, 天然支持Rxjava 不过这里我没用到Rxjava 其自带的Callback已经足够用了。

(dagger2的依赖结构)


Retrofit的简单使用例子

要使用retrofit请求网络数据,大概可以分为以下几步

1)添加依赖,这里以AndroidStudio为例:在build.grale添加如下依赖:

compile 'com.squareup.retrofit2:retrofit:2.1.0'

compile 'com.squareup.retrofit2:converter-gson:2.1.0'

2) 创建Retrofit对象

Retrofit retrofit = new Retrofit.Builder()        

    //使用自定义的mGsonConverterFactory        .addConverterFactory(GsonConverterFactory.create())

        .baseUrl("http://apis.baidu.com/txapi/")        .build();mApi = retrofit.create(APi.class);

3)发起网络请求

mApi = retrofit.create(APi.class);Call<News> news = mApi.getNews("1", "10");news.enqueue(new Callback<News>() {    @Override

 public void onResponse(Call<News> call, Response<News> response) {    }   

@Override

public void onFailure(Call<News> call, Throwable t) {    }});

public interface APi {    @Headers("apikey:81bf9da930c7f9825a3c3383f1d8d766")    

    @GET("word/word")

    Call<News> getNews(@Query("num") String num,@Query("page")String page);}

到此一个简单的使用retrofit的网络请求就完成了。

ARouter 

ARouter是阿里巴巴开源的Android平台中对页面、服务提供路由功能的中间件,提倡的是简单且够用。

典型的应用:

    从外部URL映射到内部页面,以及参数传递与解析

    跨模块页面跳转,模块间解耦

    拦截跳转过程,处理登陆、埋点等逻辑

    跨模块API调用,通过控制反转来做组件解耦

ARouter 配置

android {

defaultConfig {

...

javaCompileOptions {

annotationProcessorOptions {

arguments = [ moduleName : project.getName() ]

}

}

}

}

dependencies {

compile 'com.alibaba:arouter-api:1.2.1.1'

 annotationProcessor 'com.alibaba:arouter-compiler:1.1.2.1'

 }


api 的版本和 compiler 的版本号需要用最新的。最新的版本在 Github上可以找到。


看到这里大家会不会还是觉得一脸懵逼,即使学完了Kotlin的主流技术,但还是不知所措的。所谓学以致用,这个时候,你们就需要寻找一个实战机会。

实训邦《Kotlin电商项目》,带你实战检验!



还有前置课程《咀嚼Kotlin》,让你细细品味~


本文参考资料

mvp:https://blog.csdn.net/Sayangnala/article/details/52797232

AnKo:https://blog.csdn.net/u014005316/article/details/72572240

Glide:https://blog.csdn.net/Departure/article/details/51698625

Rxkotlin:https://www.jianshu.com/p/81aba2f6b31c

RxAndroid: https://blog.csdn.net/zhangh91722/article/details/70214492

RxBus: https://blog.csdn.net/XiaozhouBaiyong/article/details/65440806

Retrofit+Dagger2:https://blog.csdn.net/tiankong1206/article/details/46486401

https://blog.csdn.net/gdutxiaoxu/srticle/details/52745491

ARouter: https://blog.csdn.net/zhaoyanjun6/article/details/76165252

                                                 ———— / END / ————

                                               我会长成大树,等你赞声良木。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,926评论 25 707
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,709评论 2 59
  • Google在今年的IO大会上宣布,将Android开发的官方语言更换为Kotlin,作为跟着Google玩儿An...
    蓝灰_q阅读 76,828评论 31 489
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,417评论 2 45
  • 设计模式与原则 设计模式原则是为了提高代码的可维护性,可复用性和可扩展性,设计模式是设计模式原则的具体体现。 设计...
    黄二的NPE阅读 253评论 0 0