@Eugesha1998

Android Kotlin получение json через Retrofit2?

Всем привет, столкнулся с такой проблемой: У меня есть url, где хранится json-объект с пользователями и мне нужно вытащить оттуда их, однако мне приходит пустой response из-за чего выдаются ошибки о том, что поля непроинициализированы.

Код сервиса:
private const val TAG = "UserFetchr"

class UserFetchr {

    private val usersApi: UsersApi

    init {
        val retrofit: Retrofit = Retrofit.Builder()
            .baseUrl("https://reqres.in/")
            .addConverterFactory(GsonConverterFactory.create())
            .build()

        usersApi = retrofit.create(UsersApi::class.java)
    }

    fun fetchContents(): LiveData<List<UserItem>> {

        val responseLiveData: MutableLiveData<List<UserItem>> = MutableLiveData()
        val usersRequest: Call<MyResponse> = usersApi.fetchContents()

        usersRequest.enqueue(object : Callback<MyResponse> {

            override fun onFailure(call: Call<MyResponse>, t: Throwable) {
                Log.e(TAG, "Failde to fetch users", t)
                t.printStackTrace()
            }

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

                Log.d(TAG, "Response received!")
                val myResponse: MyResponse? = response.body()
                Log.d(TAG, "${response}")
                val userResponse: UserResponse? = myResponse?.users
                var userItems: List<UserItem> = userResponse?.userItems
                    ?: mutableListOf()
                userItems = userItems.filterNot {
                    it.urlImage.isBlank()
                }
                responseLiveData.value = userItems
            }
        })

        return responseLiveData
    }
}


Код myResponse:
class MyResponse {
 lateinit var users: UserResponse
}


class UserResponse {
    @SerializedName("data") lateinit var userItems: List<UserItem>
}


Код UserItem:
data class UserItem(
    @SerializedName("id") var id: Int,
    @SerializedName("avatar") var urlImage: String,
    @SerializedName("first_name") var firstName: String,
    @SerializedName("last_name") var lastName: String,
    @SerializedName("email") var email: String
){}


Интерфейс UserApi:
interface UsersApi {
    @GET("https://reqres.in/api/users?page=1" + "&format=json" + "&extras=data")
    fun fetchContents(): Call<MyResponse>
}


Выдаёт следующую ошибку:
605f675253d0e906731216.png
  • Вопрос задан
  • 280 просмотров
Пригласить эксперта
Ответы на вопрос 1
@koperagen
Чего ты хочешь добиться, сделав поля lateinit?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы