Получить результат топлива в uiThread - PullRequest
1 голос
/ 15 октября 2019

Я использую библиотеку «Топливо» для получения данных с сервера, и вот мой код:

button1.setOnClickListener {
            val jb = "{......}"

            Fuel.post("server_url")
                    .header(Headers.CONTENT_TYPE, "application/json")
                    .body(jb)
                    .response { request, response, result ->
                        Log.d("test", request.toString())
                        Log.d("test", response.toString())
                        val (bytes, error) = result
                        if (bytes != null) {
                            val e = JsonParser().parse(String(bytes))
                            val obj = e.asJsonObject
                            val rm = obj.get("rm").asString
                        }
                    }
        }

Но вот проблема: как я могу получить значение «rm»?

Он определен в функции Fuel, и я не могу получить его значение из Fuel ...

Может кто-нибудь помочь мне с его получением?

1 Ответ

0 голосов
/ 15 октября 2019

Вы можете объявить var вне объекта ответа и установить значение

var globalRM : String? = null;
button1.setOnClickListener {
            val jb = "{......}"
            var rm : String? = null;
            Fuel.post("server_url")
                    .header(Headers.CONTENT_TYPE, "application/json")
                    .body(jb)
                    .response { request, response, result ->
                        Log.d("test", request.toString())
                        Log.d("test", response.toString())
                        val (bytes, error) = result
                        if (bytes != null) {
                            val e = JsonParser().parse(String(bytes))
                            val obj = e.asJsonObject
                            globalRM = obj.get("rm").asString
                            rm = obj.get("rm").asString
                        }
                    }
        }

Вы также можете захотеть сделать что-то сразу после того, как получите значения, в этом случае создайте метод и используйтеэто:

onCreate(...){
button1.setOnClickListener {
            val jb = "{......}"
            var rm : String? = null;
            Fuel.post("server_url")
                    .header(Headers.CONTENT_TYPE, "application/json")
                    .body(jb)
                    .response { request, response, result ->
                        Log.d("test", request.toString())
                        Log.d("test", response.toString())
                        val (bytes, error) = result
                        if (bytes != null) {
                            val e = JsonParser().parse(String(bytes))
                            val obj = e.asJsonObject
                            globalRM = obj.get("rm").asString
                            rm = obj.get("rm").asString
                            onFuelFetched(rm)
                        }
                    }
        }
}

fun onFuelFetched(val rm:String?){
    // do anything you wish to do with this value here
}
...