kotlin事件回调两种方式

记录学习kotlin过程中事件回调两种方式

定义一个回调接口

1
2
3
4
5
interface NetCallBack {

fun onSuccess(data: Any)
fun onFail(msg: String)
}

模拟一个网络请求类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/**
* <pre>
* author : ghwang
* e-mail : 429329513@qq.com
* time : 2019/05/17
* desc : 单利,类方法
* </pre>
*/

object HttpRequest {

private val resultCode: String by lazy { "0" }

//kotlin方式回调
lateinit var onSuccess: (data:Map<String,String>) -> Unit
lateinit var onFail: (msg:String) -> Unit



fun sendRequest(url: String,params:Map<String,Any>,callBack:NetCallBack){

when(resultCode){

"0" -> {

//java方式回调
callBack.onSuccess(mapOf("data" to "lists"))
//kotlin方式回调

onSuccess.invoke(mapOf("kotlinCallBack-Data" to "lists"))

}else -> {

//java方式回调
callBack.onFail("error")
//kotlin方式回调
onFail.invoke("kotlinCallBack-Error")
}
}
}


}

具体调用方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//kotlin方式回调,为了方便测试先初始化好再发送请求
HttpRequest.onSuccess = {it

L.json(it)
}

HttpRequest.onFail = {it

L.d(it)
}


HttpRequest.sendRequest("http", mapOf("foo" to "bar"),object :NetCallBack{
override fun onSuccess(data: Any) {

L.json(data as Map<String,String>)
}

override fun onFail(msg: String) {

L.d(msg)
}

})