Kotlin入门配置与简单实战

这里写图片描述

1、插件安装

File –> Setting –> Plugins –> Install JetBrains Plugins –> 搜索找到Kotlin并安装

这里写图片描述

安装完成后重启AS。

此时再新建类时就会多出两个选项。

这里写图片描述

2、配置kotlin

根目录下build.gradle

        buildscript {
            ext.kotlin_version='1.0.6'
            repositories {
                jcenter()
            }
            dependencies { 
                // kotlin配置
                classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
                classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
            }
        }

这里有一个注意点:就是classpath的值,因为我们使用了kotlin_version这个变量,所以不能使用单引号括起来,一定得使用双引号。

app下的build.gradle

// kotlin插件
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
ext.anko_version = '0.8.2'

 sourceSets {
  main.java.srcDirs += 'src/main/kotlin'//main目录下建立kotlin专用文件夹
  }
dependencies{
...
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
compile "org.jetbrains.anko:anko-sdk15:$anko_version"
compile "org.jetbrains.anko:anko-support-v4:$anko_version"
}

后来发现第一行的gradle依赖的作用在于intent的地方,如下代码

 val intent = Intent(this,SelectPhotoActivity::class.java)
 startActivity(intent,)

这里的 .java,如果不加stdlib依赖,这里就一直报错,找不到 .java

3、运行程序

在kotlin文件夹下添加了和java下一样的package,然后在配置文件中把启动activity改成RunActivity

这里写图片描述

package com.xmliu.itravel
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_run.*

class RunActivity : AppCompatActivity() {

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

        runTV.text = "我是一个跑者"
        runTV.OnClick { toast(this,"敢点我,你完蛋了") }
    }
}

最终运行结果,如图所示

这里写图片描述

4、其他小技巧

实现OnClickListener接口

class KotlinAboutActivity : Activity() , View.OnClickListener{
     override fun onClick(view: View?) {
          when (view?.id) {
        R.id.aboutus_new_layout -> startActivity(Intent(this@KotlinAboutActivity, KotlinVersionHtmlActivity::class.java))
 ...
 ...
            }
     }
      override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_about)
            aboutus_new_layout.setOnClickListener(this)
      }
}

使用this@KotlinAboutActivity 确认指向目标
lambda表达式,当就一个参数时,可以省略,用内部的it代替;当参数不使用时,可以用下划线_取代

实现网络请求

val result = URL("<api call urlStr>").readText()

以上一行代码在java里要写成以下一大段

public String getHttpStringWithGet(String urlStr) {
        StringBuffer sb = new StringBuffer();
        String line;
        BufferedReader buffer = null;
        try {
            URL url = new URL(urlStr);
            HttpURLConnection urlConn = (HttpURLConnection) url
                    .openConnection();
            urlConn.setRequestMethod("GET");
            urlConn.setUseCaches(false);
            urlConn.setConnectTimeout(5000);
            urlConn.setReadTimeout(50000);
            urlConn.connect();

            buffer = new BufferedReader(new InputStreamReader(
                    urlConn.getInputStream()));
            while ((line = buffer.readLine()) != null) {
                sb.append(line);
            }

        } catch (Exception e) {
            e.printStackTrace();
            Log.i("TAG", e.getMessage());
            JSONObject obj = new JSONObject();
            try {
                obj.put("success", "false");
                obj.put("reason", "无法连接到服务器");
            } catch (JSONException e1) {
                e1.printStackTrace();
            }
            return obj.toString();
        } finally {
            try {
                if (buffer != null)
                    buffer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return sb.toString();
    }

onActivityResult回调

   在onActivityResult回调方法中,一定要注意把Intent的参数值添加?,这意味着该值可以为空,不然在用户取消操作时,程序会崩溃;同理于适配器adapter的convertView也需要加上问号

Kotlin数值对象

如下表格

类型长度
Double64
Float32
Long64
Int32
Short16
Byte8

实体类javaBean

data class User(val name: String, val age: Int)

RecyclerView适配器

这是借助了封装好的基类BaseRecycerAdapter,里面封装好了点击事件

    class CalendarAdapter(context: Context, list: List<*>) : BaseKotlinRecyclerViewAdapter(context, list) {

        override fun onCreateViewLayoutID(viewType: Int): Int {
            return R.layout.item_travel_calendar_list
        }

        override fun onBindViewHolder(holder: RecyclerHolder, position: Int) {
            val item = list[position] as NoteBean
            holder.convertView.calendar_item_content.text = item.content

        }
    }

如果不借助的话,就像下面这样,参考这里

class MainAdapter(var context: Context, var data: Array<String>) : RecyclerView.Adapter<MainAdapter.MyViewHolder>() {  

    override fun getItemCount(): Int {   
        return data.size  
    }  

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {  
        holder.itemView.tv_title.text = "标题:"  
        holder.itemView.tv_content.text = data[position]  
    }  

    override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): MyViewHolder {  
        return MyViewHolder(LayoutInflater.from(context).inflate(R.layout.listitem_main, parent, false))  
    }  

    class MyViewHolder(itemView: View?) : RecyclerView.ViewHolder(itemView)  
}  

5、参考文章

  1. Kotlin官网 http://kotlinlang.org/
  2. Kotlin官方博客 https://blog.jetbrains.com/kotlin/
  3. GitHub官方链接 https://github.com/JetBrains/kotlin
  4. Kotlin在线编辑器 https://try.kotlinlang.org
  5. 国内为数不多的关于Kotlin的视频讲解 https://github.com/enbandari/Kotlin-Tutorials
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值