繁体   English   中英

RxJava调用后从方法返回字符串

[英]Return String from a Method after RxJava call

我从后端调用服务后遇到返回值的问题,这是我从服务中获取的字符串,调用此服务后我希望该方法返回该字符串

我尝试将其保存在变量中,然后将其保存在sharedpreference中,但它始终会返回一个空字符串。 但是,当我从服务中获得Log.d结果时,我可以看到它返回了我想要的东西,但是我想要方法然后返回那个结果

    fun getExchangePortalToken(): String {
//I want this variable to be the value of the String i get from the Service and to return it afterwards
        var token = ""
        compositeDisposable!!.add(apiServicePortal!!.getExchangeToken(basic, "casopenid-bearer", idToken)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeWith(object: DisposableSingleObserver<Response<ResponseBody>>(){
                    override fun onSuccess(value: Response<ResponseBody>?) {
                        Log.d("EXCHANGE_PORTAL", "SUCCESS")

                        val string = value!!.body()!!.string()
                        val obj = JSONObject(string)
                        var access_token = obj.getString("access_token")

//Here im setting the value of the string based on the Result i get from the service
                        token = access_token
                    }

                    override fun onError(e: Throwable?) {
                        Log.d("EXCHANGE_PORTAL", e!!.message)
                        token = "ERROR"
                    }

                }))
        return token
    }

您只是不了解线程如何工作。 Rx启动新线程(因为您调用了subscribeOn(Schedulers.io()) ),然后return token代码与您的请求并行执行。 这意味着在getExchangePortalToken结束时,您的请求才刚刚开始处理。

如果要使用getExchangePortalToken获取结果,可以放置回调参数:

fun getExchangePortalToken(onSuccess: (String) -> Unit): Unit {//now it doesn't return anything

然后在onSuccess的末尾调用它:

override fun onSuccess(value: Response<ResponseBody>?) {
    ...
    var access_token = obj.getString("access_token")
    onSuccess(access_token)
}

放置类似的回调来处理错误并在onError调用它会很有用。 我希望你能自己做。

当然,您可以使用协程使您的代码看起来像您当前的代码,但我强烈建议您先学习如何使用线程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM