Передача значений в горячем режиме при запуске ответа onSuccess? - PullRequest
0 голосов
/ 21 января 2019

Таким образом, моя цель, как и в названии, состоит в том, чтобы передать API результат ответа, бросающий метод onSuccess.run() во фрагмент. Просто чтобы дать некоторый контекст, я начинаю делать такой метод в классе Manager, например:

    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 на тег, потому что в нем есть что-то функциональное.

1 Ответ

0 голосов
/ 21 января 2019

Вам просто нужно заменить onSuccess с Runnable на ваш обратный вызов пользовательского функционального типа:

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

Затем передайте userName для обратного вызова:

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()
                    }
                })
    }

И затем вы можете получить userName из этого обратного вызова:

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