Как получить топливный результат за пределами топливного вызова - PullRequest
0 голосов
/ 13 февраля 2019

Я работаю над приложением kotlin на Android и использую Fuel для получения данных из REST API.

Я хочу заполнить мой ArrayList данными из моего API.

Но если я отлаживаю свой код, после перехода внутрь части Fuel , мой ArrayList все еще пуст (но он не пуст, если я печатаю его в Fuel).

Почему?И как я могу получить результат за пределами топливной части?

val receivedAlerts = ArrayList<String>()
var jsonArray : JSONArray
val resultActus = Fuel.get(Constants.urlAlertes).responseJson { request, response, result ->
    Log.i(TAG, result.get().obj().toString())
    result.fold({
        json ->
        jsonArray = JSONArray(json.content)

        if(jsonArray.length() > 0){
            (0 until jsonArray.length()).forEach {
                val item = jsonArray.getJSONObject(it)
                val id = item.getString("ID")
                receivedAlerts.add(id)
            }
        }
    }, {
        err ->
        Log.i("error", err.toString())
    })
}
    Log.i(TAG, "from getReceivedAlerts $receivedAlerts")

Никто не знает?

1 Ответ

0 голосов
/ 19 февраля 2019

Fuel работает в фоновом потоке, что означает, что функция возвращается до заполнения вашего массива.

Пример:

Вызов функции:

fun sendToAPI(context: Context, data: someData, f: () -> Unit)

Как вы можете видеть, при вызове функции мы передаем функцию в качестве параметра (f), это будет полезнопотом.

SomeURL.httpPost(formData)
        .response { _, _, result -> result.fold(
            success = {
                // Save data in the array
                // Runs function
                f()
                context.showToast("success")
            },
            failure = { error ->
                context.showToast(error.message!!)
            }
        ) }

По сути, в заявлении об успехе вы хотите сохранить свой массив. Вы можете сделать это разными способами, мне лично нравится иметь синглтон, в котором хранятся все мои данные (вы можете создать его с помощью объектаКлючевое слово в kotlin)

Затем мы запускаем функцию, переданную в качестве параметра, где вы хотите получить данные из синглтона и делать с ними все, что хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...