热传递值会引发可运行的 onSuccess 响应



所以我的目标就像标题所说的那样,是将响应结果API抛出一个onSuccess.run()方法传递给片段。为了提供一些上下文,我开始在管理器类中执行这样的方法,例如:

    override fun callUser(onSuccess:Runnable, onFailure:Runnable){
 NetworkManager.instance.performCall(NetworkManager.REGISTRATION.verifyUser(id),
                object : NetworkManager.OnRequestCallback<UserInfoResponse> {
                    override fun onSuccess(body: UserInfoResponse?) {
                        body?.data?.let {
                            onSuccess.run()
                        }
                    }
                    override fun onError(errorBody: String?) {
                        onFailure.run()
                    }
                })
    }

然后我转到一个片段并像这样调用上面的方法:

objectManager.callVerifyAdvisor(
                    Runnable {[On Success stuff },
                    Runnable {[On Error]}
        }

问题是,尽管我可以在片段中决定要在onSuccess()onFailure()方法中执行的操作,但我无法通过这样做来获得对该片段的API Results

所以我的想法是做类似[我使用注释来指定重要部分]的事情:

NetworkManager.instance.performCall(NetworkManager.REGISTRATION.verifyUser(id),
                    object : NetworkManager.OnRequestCallback<UserInfoResponse> {
                        override fun onSuccess(body: UserInfoResponse?) {
                            body?.data?.let {
                                it.userName // I get this from api response
                                onSuccess.run()
                            }
                        }
                        override fun onError(errorBody: String?) {
                            onFailure.run()
                        }
                    })
        }

然后在我的片段上,我想要这样的东西:

   objectManager.callVerifyAdvisor(
              Runnable {[On Success stuff }, //receive here the it.userName
              Runnable {[On Error]}
}

有人可以给任何想法如何做到这一点吗?旁注 -> 我把 kotlin 放在标签上,因为它有某种功能的东西。

你只需要将你的 onSuccess 从Runnable替换到你的自定义函数类型回调:

override fun callUser(onSuccess: (String) -> Unit, onFailure: Runnable) {...

然后将用户名传递给回调:

NetworkManager.instance.performCall(NetworkManager.REGISTRATION.verifyUser(id),
                object : NetworkManager.OnRequestCallback<UserInfoResponse> {
                    override fun onSuccess(body: UserInfoResponse?) {
                        body?.data?.let {
                            onSuccess.invoke(it.userName) // Pass userName
                        }
                    }
                    override fun onError(errorBody: String?) {
                        onFailure.run()
                    }
                })
    }

然后你可以从这个回调中获取用户名:

objectManager.callVerifyAdvisor(
          {userName -> } // Here you get your result
          Runnable {[On Error]}
}

最新更新