Kotlin写Android(二)——启动页(java转kotlin)

0.背景

哈哈,犯懒了,好久没写Kotlin的笔记了,最近听说Kotlin成了Android开发的官方语言了,我也凑个热闹。在上一篇Kotlin写Android(一)——开发环境搭建中已经详细讲述了Kotlin环境的搭建,及插件使用。但是在项目中还是远远不够的,接下来我会根据项目的实际开发对功能进行讲解,并从中总结kotlin的知识点。

1.Activity创建

我们这次做的是启动页,启动页肯定是用跳转功能的,对吧。那我们要有两个Activity,通过Kotlin写Android(一)——开发环境搭建的学习在我们的项目中已经存在了一个MainActivity,这个是从java转换过来的。我们还需要一个SplashActivity,这个我们直接创建:
这里写图片描述

这样就跟我们创建java文件一样,这里我们选择Kotlin Activity,先看下自动生成的代码:

class SplashActivity: AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main2)
    }
}

与我们之前转换得到的一样。

2.Activity跳转

下面就是如何实现SplashActivity与MainActivity之间的跳转了,实际上就是下面这个语句的转换:

startActivity(new Intent(this,MainActivity.class));

在具体下就是对象的创建和Class类型的表示。当初我是先建一个java类,把这段代码写在java代码中,再将java代码转换成kotlin,得到如下语句:

 startActivity(Intent(this, MainActivity::class.java))

##3.数据库copy
项目中有个功能,就是拷贝raw中的数据库,java代码为:

 private void copyDB() {
        File dbFile = new File(getFilesDir(), "evaluation.db");
        if (dbFile.exists() && dbFile.length() > 0) {
            return;
        }
        try {
            InputStream input = getResources().openRawResource(R.raw.evaluation);
            OutputStream output = openFileOutput("evaluation.db", MODE_PRIVATE);
            byte[] buffer = new byte[512];
            int len;
            while (true) {
                len = input.read(buffer);
                if (len == -1) {
                    break;
                }
                output.write(buffer, 0, len);
            }
            input.close();
            output.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

转换后的kotlin代码为:

  private fun copyDB() {
        val dbFile = File(filesDir, "evaluation.db")
        if (dbFile.exists() && dbFile.length() > 0) {
            return
        }
        try {
            val input = resources.openRawResource(R.raw.evaluation)
            val output = openFileOutput("evaluation.db", Context.MODE_PRIVATE)
            val buffer = ByteArray(512)
            var len: Int
            while (true) {
                len = input.read(buffer)
                if (len == -1) {
                    break
                }
                output.write(buffer, 0, len)
            }
            input.close()
            output.close()
        } catch (e: IOException) {
            e.printStackTrace()
        }

分析下两种语言的不同:
File的创建
java:

 File dbFile = new File(getFilesDir(), "evaluation.db");

kotlin:

val dbFile = File(filesDir, "evaluation.db")

区别:

  1. 创建对象时,前面的类名声明没了,变成了val
  2. new关键字没有了(这个我们在上面的Intent创建中也可以看到)
  3. getFilesDir()变成了filesDir
    而在InputStream的创建中我们发现与File的创建一样,只是getResources()变成了resources,在往下看,发现替换对象创建前面类名声明的不仅有val还有var,这两个又有什么区别?
    先看下val与var的区别:
    通过对var和val创建的对象对比我们不难发现,val创建的对象只有在创建时赋过一次值,之后没有在变化过,而var创建的对象被赋值了多次。val就相当于java中添加了final 关键字。
    在看getResources()与resources
    在kotlin里面我们按住ctrl键点到filesDir中查看,发现引用的就是getResources(),而所返回的mResources变量依旧是私有的。所以我们可以认为,当一个类中存在getXyz()的时候,我们通过kotlin可以直接用xyz来访问。

4.知识点总结

  1. 创建对象无需new关键字
  2. 创建对象无需在前面写类名,用var代替,final的用val代替
  3. 当对象中有类似getXyz()的方法时可以直接使用xyz来访问
  4. java的Class用类名::class.java表示(MainActivity.class->MainActivity::class.java)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

得食猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值