Почему я не могу вернуть свой список ответов от дооснащения как тип возврата, вместо этого мне нужно иметь прослушиватель обратного вызова из действия, а затем передать данные - PullRequest
0 голосов
/ 09 апреля 2020

Вот мой метод контроллера остатка

fun getPosts (): ArrayList {

    val result = ArrayList<Post>()

    val retrofit = RetrofitClient.retrofitInstance
    val service = retrofit?.create(ApiService::class.java)
    val call = service?.getPosts()

    call?.enqueue(object : Callback<List<Post>> {
        override fun onFailure(call: Call<List<Post>>, t: Throwable) {

        }

        override fun onResponse(call: Call<List<Post>>, response: Response<List<Post>>) {

            println(response.body()?.size)
            if(response.isSuccessful && response.body()!= null) {

                val posts = response.body()
                listener.onRestDataReceived(posts!!)
                    result.addAll(posts!!)

            }
        }

    })
    return result
}

Когда я пытаюсь получить доступ к данным из возвращаемого типа, я получаю пустой список массивов, но если я использовать метод обратного вызова интерфейса и передать данные через интерфейс и реализовать интерфейс в моей деятельности. Я могу получить доступ к данным

1 Ответ

1 голос
/ 09 апреля 2020

Метод enqueue(Callback<T> callback), который вы вызываете, является асинхронным, поэтому фактический результат enqueue(Callback<T> callback) вы получите в callback методах. В вашем методе getPosts() после вызова call?.enqueue выполнение вашего кода немедленно переходит к оператору return result;, поэтому вы получаете пустой массив.

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