Android快速转战Kotlin教程

本文提供了一位开发者从Java转战Kotlin的个人经验,包括学习思路、方法和资源。文章详细介绍了Kotlin入门的三个步骤:学习语法、对比学习和Demo实践,涉及MVP模式、Retrofit+RxJava等。还分享了Kotlin设计模式的进阶知识,推荐了相关书籍和开源项目,以及丰富的学习资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

kotlin是啥?这里就不用多说了,想必看这篇文章的童鞋肯定是有所了解的。

那么这篇文章你可以收获什么?

答:本文主要通过本人如何从java转战到kotlin并应用在实际项目中的个人经历,给大家提供一些学习思路、学习方法以及一些学习资料和个人总结。

前提:你的项目(包含个人项目)即将开始用到kotlin(没有项目作为依托你会缺少十足的动力,而且缺少应用场景乘热打铁那也是白学) 建议:建议没有切换kotlin的小伙伴快来转战kotlin吧!最近一段时间搞了kotlin之后发现写起来确实比java爽多了,语法非常精简,而且据统计现已有30%安卓项目使用了kotlin,所以小伙伴们行动起来吧,这必定是大势所趋,可千万别被淘汰了啊

入门

俗话说万事开头难,不过我们先把Kotlin语法学习一遍,你就会发现so easy,而且语言思想都是相通的

第一步:学习语法

当然是去官网学习喽:kotlinlang.org/docs/refere…

如下图:

不过英文吃力的小伙伴可以去菜鸟教程网站学习

地址:www.runoob.com/kotlin/kotl…

如下图:

内容与官网一致。

不过不能光看,一定要写,就算照着抄也要多写,尽量在学习时候多和java语法做对比,会印象深刻。 如下图,本人的练习代码:

第二步:对比学习

大家可以参考下面的链接进行学习:

from-java-to-kotlin : github.com/MindorksOpe…

from-java-to-kotlin中给出了我们常用的语法对比

如图:

第三步:Demo练习

通过上面的学习我们此刻已经熟悉了kotlin的基本语法,可以来尝试写一个万年历的Demo。

1、新建工程

我们新建一个工程,点击Include kotlin support 如图:

我们看一下Include kotlin support都帮我们做了什么事情

首先module中gradle文件

如图:

比我们之前的工程多了下面两个引用和一个依赖:

// 使用Kotlin插件
apply plugin: 'kotlin-android'
// 使用Kotlin Android扩展插件
apply plugin: 'kotlin-android-extensions'

dependencies {
    //...
    //添加Kotlin 标准库
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    //...
}
复制代码

知识点: kotlin-android-extensions相当于DataBinding,同样的目的为了偷懒不用写findViewByIdAndroid 开发必备。

我们再看一下project中的gradle文件 如图:

比我们之前的工程多了Kotlin编译插件:

// 添加了Kotlin编译插件
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
复制代码

2、Demo说明

该项目使用MVP模式,里面用到了Retrofit2+RxJava2,然后使用了聚合的万年历接口,Demo非常简单便于初学者快速掌握。

Demo使用展示:

工程目录结构如图:

3、Activity

看下布局文件非常简单,我们可以在activity里面直接将控件的id当成变量来使用

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    ....">

    <DatePicker
        android:id="@+id/dataPicker"
        .... />

    <Button
        android:id="@+id/selectButton"
        .... />

    <TextView
        android:id="@+id/titleTextView"
        .... />

    <TextView
        android:id="@+id/contentTextView"
       ....
       />

</android.support.constraint.ConstraintLayout>
复制代码
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    selectButton.setOnClickListener {
        titleTextView.visibility = View.GONE
        selectButton.visibility = View.GONE
        contentTextView.visibility = View.GONE
        dataPicker.visibility = View.VISIBLE
    }
    ....
    ....
}
复制代码

注意:直接使用id作为变量的时候,要在Module的gradle里面加入扩展,才能使用,不然会报错

apply plugin: 'kotlin-android-extensions'
复制代码

这个上面已经说过,我们创建工程的时候如果选中Include kotlin support怎会自动在gradle中生成。

4、Retrofit+RxJava

Retrofit结合RxJava能快捷的使用网络请求。

创建Service接口,Kotlin的类型是写在后面

interface RetrofitService {

    /**
     *  获取当天详细信息
     *  @param date 日期
     */
    @GET("calendar/day")
    fun calenderDay(
            @Query("date") date: String,
            @Query("key") key: String
    ): Observable<CalentarDayBean>

    /**
     *  获取近期假期
     *  @param date 日期
     */
    @GET("calendar/month")
    fun calenderMonth(
            @Query("date") date: String
    ): Observable<CalentarMonthBean>

    /**
     *  获取当年假期列表
     *  @param date 日期
     */
    @GET("calendar/year")
    fun calenderYear(
            @Query("date") date: String
    ): Observable<CalentarYearBean>
}

复制代码

创建Retrofit,Kotlin的class并不支持static变量,所以需要使用companion object来声明static变量,其实这个变量也不是真正的static变量,而是一个伴生对象

伴生对象可以实现静态调用,通过类名.属性名或者类名.方法名进行调用

class RetrofitUtil {
    companion object {
        /**
         * 创建Retrofit
         */
        fun create(url: String): Retrofit {
            //日志显示级别
            val level: HttpLoggingInterceptor.Level = HttpLoggingInterceptor.Level.BODY
            //新建
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值