美文网首页
Kotlin 接口回调

Kotlin 接口回调

作者: 紫一年 | 来源:发表于2022-08-10 15:35 被阅读0次

    单接口方法时候,只有一个参数,无返回值的情况下不需要定义接口,有返回值的时候只需将Unit改为返回值类型

    //赋值类 MyReaderCardManager
    private lateinit var listener:(cardInfo: IDCard?) -> Unit;
    fun setOnIDCardListener(listener: (cardInfo: IDCard?) ->Unit){
        this.listener = listener
    }
    listener.invoke(idCard)
    
    //回调类
    MyReaderCardManager.setOnIDCardListener {
                if (it==null){
                    Log.d(TAG, "startZFBFaceService: 读取身份证超时")
                    idCardResult.postValue(PersonInfoDataError(errorCode = "读取身份证失败", msg = "读取身份证超时"))
                }else{
                    Log.d(TAG, "startZFBFaceService: ${it?.name}")
                    val infoData = PersonInfoData()
                    infoData.id = it.id.trim { it <= ' ' }
                    infoData.name = it.name.trim { it <= ' ' }
                    infoData.photoDataHexStr = it.photoDataHexStr.trim { it <= ' ' }
                    idRecognize(it, infoData) //1:1认证比对
                }
            }
    

    多接口方法回调

    定义一个接口
    interface IZFBServicesGetCard {
        fun onIDCardInfo(cardInfo: IDCard)
        fun onSuccess()
        fun onFail():Int
        fun onLoad(a:Int,b:String)
    }
    
    /**
     * @author 
     * @date 2022/8/10 14:16
     * @description Builder  创建一个builder简化回调
     **/
    class Builder: IZFBServicesGetCard {
    
        private lateinit var idCardListener :(cardInfo: IDCard) -> Unit
        private lateinit var successListener :() -> Unit
        private lateinit var failListener :() -> Int
        private lateinit var loadListener :(a: Int,b:String) -> Unit
    
        fun setOnIDCardInfo(listener: (cardInfo: IDCard) -> Unit){
            idCardListener = listener
        }
    
        fun setOnSuccess(listener: () -> Unit){
            successListener = listener
        }
    
        fun setOnFail(listener: () -> Int){
            failListener = listener
        }
    
        fun setOnLoad(listener: (a: Int,b: String) -> Unit){
            loadListener = listener
        }
    
        override fun onIDCardInfo(cardInfo: IDCard) {
            idCardListener.invoke(cardInfo)
        }
    
        override fun onSuccess() {
            successListener.invoke()
        }
    
        override fun onFail(): Int {
            failListener.invoke()
            return 6666
        }
    
        override fun onLoad(a: Int, b: String) {
            loadListener.invoke(a,b)
        }
    }
    
    //赋值类   MyReaderCardManager
        private lateinit var listen: IZFBServicesGetCard
        fun setOnZFBServiceListener(listen: Builder.() -> Unit ){
            var builder = Builder()
            builder.listen()
            this.listen = builder
        }
    listen.onFail()
    listen.onSuccess()
    listen.onLoad(22222,"456")
    
    //监听类
            MyReaderCardManager.setOnZFBServiceListener {
                setOnFail {
                    Log.d(TAG, "startZFBFaceService: setOnFail")
                }
    
                setOnIDCardInfo {
                    Log.d(TAG, "startZFBFaceService: setOnIDCardInfo${it.name}")
                }
    
                setOnLoad { a, b ->
                    Log.d(TAG, "startZFBFaceService: setOnLoad --$a+++$b")
                }
    
                setOnSuccess {
                    Log.d(TAG, "startZFBFaceService: setOnSuccess")
                }
            }
    
    
    

    相关文章

      网友评论

          本文标题:Kotlin 接口回调

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