美文网首页
Kotlin初体验:IM项目体验

Kotlin初体验:IM项目体验

作者: yooking丶毓 | 来源:发表于2020-08-17 18:44 被阅读0次

个人博客地址:https://blog.yookingh.cn
该文章地址:https://blog.yookingh.cn/dev/190809-kotlin-IM.html
配合食用文章:Kotlin-webSocket的基本封装
简书地址:Kotlin-webSocket的基本封装

项目

基于 Kotlin 和 AndroidX 及 WebSocket 的 IM 项目
本文主要以一个小Demo来初步了解Kotlin编程与Java编程的差异

项目构建

聊天窗口构建

框架引入:BRVAH官网

implementation 'androidx.recyclerview:recyclerview:1.1.0-beta02'//AndroidX RecyclerView
implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.46'//BRVAH

new 对象
在Kotlin中,new Object();省略为Object(),也不需要分号
全局变量
private lateinit var mContext: Context
全局变量应该用var来定义,其类型写在:之后
lateinit 修饰符:延迟初始化
lateinit 不能用来修饰基本数据类型,因为基本类型的属性在类加载后的准备阶段都会被初始化为默认值

lateinit var a : Int
//'lateinit' modifier is not allowed on properties of primitive types

lateinit 不能修饰val变量,只能修饰可变的属性

private lateinit val etMessage : AppCompatEditText
//'lateinit' modifier is allowed only on mutable properties

静态全局变量

companion object {
    //ChatActivity.class.getName()的写法
    //const 是常量修饰词 类似 java 中的 static final
    //val 相当于 final
    //const 不能修饰 var
    const val TAG: String = ChatActivity::class.java.name
}

符号
helper!!意为:helper不做为空校验,如果为空则抛出异常

// ? 即 或许为空
// ?. 相当于 if(object == null) return null; else return objcet.xx; 
val mList: ArrayList<String>? = null//如果Object后面不加问号,即Object?那么mList = null会报错
Log.d(TAG, "ListSize = ${mList?.size}")//用 mList!!.size 会抛出空指针异常
Log日志:com.yooking.socket.ChatActivity: ListSize = null

构建javabean

class ChatData(private val type: Int) : MultiItemEntity {
    var name: String? = ""
}
//对应的java写法
class ChatData extends MultiItemEntity{
    private int type;
    private String name = "";
    public ChatData(int type){
        this.type = type;
    }
    
    public void setName(String name){
        this.name = name;
    }
    
    public String getName(){
        return this.name;
    }
}
//在Kotlin中 get 方法 的使用方法为 chatData.name
//在Kotlin中 set 方法 的使用方法为 chatData.name = "string"

WebSocketLib构建

框架引入:OkHttp-GithubPage

api 'com.squareup.okhttp3:okhttp:4.0.1'//okhttp 4.0.1
//api 'com.squareup.okhttp3:mockwebserver:4.0.1'//okhttp moc 请求验证
api 'com.squareup.okhttp3:logging-interceptor:4.0.1'//okhttp 请求日志

匿名内部类
在kotlin中,匿名内部类和java中的差别不大

private var handler: Handler
init{
    handler = Handler {//it:Messag!
        send(heartMessage)
        it.target.sendEmptyMessageDelayed(WHAT_HEART, heartTime)
    }
}
//java
handler = new Handler(){
    @override
    public void handlerMessage(Message msg){
        super.handleMessage(msg);
        send(heartMessage);
        sendEmptyMessageDelayed(WHAT_HEART, heartTime);
    }
}

静态内部类
由于handler调用外部方法容易造成内存泄漏,所以,静态内部类了解一下:

companion object {
    private class WithoutLeakHandler(wsu:WebSocketUtils):Handler(){
        private val mWsu:WeakReference<WebSocketUtils> = WeakReference(wsu)
        override fun handleMessage(msg: Message?) {
            super.handleMessage(msg)
            val webSocketUtils = mWsu.get()!!
            webSocketUtils.send(webSocketUtils.heartMessage)
            msg!!.target.sendEmptyMessageDelayed(WHAT_HEART, webSocketUtils.heartTime)
        }
    }
}

具体实现请见Demo

聊天代码:Demo

相关文章

  • Kotlin初体验:IM项目体验

    个人博客地址:https://blog.yookingh.cn该文章地址:https://blog.yooking...

  • kotlin小白日记2「工具类的封装,Anko简化吐司,空值处理

    Kotlin初体验二「kotlin框架Anko的使用,工具类的封装,空值处理」 本篇上篇为kotlin初体验,源代...

  • Kotlin 初体验

    Kotlin 初体验 Kotlin也是基于JVM设计的编程语言,相对Java来说,Kotlin在编写代码时有如下优...

  • 一百篇博客文章目录

    一百篇博客项目目录 Android常用工具类封装 kotlin初体验 实现一个智能聊天机器人 Android开发工...

  • 使用Kotlin开发Android应用初体验

    使用Kotlin开发Android应用初体验 昨晚,最近一届的谷歌IO大会正式将Kotlin确定为了官方开发语言,...

  • Kotlin初体验

    距离kotlin成为Android一级开发语言已经一年了,这节将从零开始,实现kotlin的几个小知识点,以下操作...

  • Kotlin初体验

    开发工具: IntelliJIDEA 第一步:打开idea IDE 选中 kotlin 点击next选项 第...

  • Kotlin初体验

    谷歌大会之后,Kotlin火的不要不要的,将来用Kotlin开发Android应用或许会成为主 流,所以An...

  • Kotlin初体验

    项目环境 android studio 2.2.2 首先安装 Kotlin插件 然后重新启动 Android St...

  • kotlin初体验

    前言 之前呢一直听说kotlin怎么怎么厉害,但是我那会觉得java现在覆盖率这么高。如果要替代可能还要很久呢,也...

网友评论

      本文标题:Kotlin初体验:IM项目体验

      本文链接:https://www.haomeiwen.com/subject/kvaqjktx.html