ResqRes API всегда показывает сбой запроса

#android #api #kotlin #kotlin-coroutines

#Android #API #kotlin #kotlin-сопрограммы

Вопрос:

Код MainActivity.kt

         val r = Retrofit.Builder()
            .baseUrl("https://reqres.in/api/")
            .addConverterFactory(GsonConverterFactory.create())
            .build()

        val api = r.create(ResqResAPI::class.java)
        GlobalScope.launch(Dispatchers.IO) {
            try {
                val response = api.getUsers()
                GlobalScope.launch(Dispatchers.Main) {
                    Toast.makeText(
                        this@MainActivity,
                        "Request Success",
                        Toast.LENGTH_SHORT
                    ).show()
                }
                response.body()?.users?.let { printUsers(it) }
            } catch (e: Exception) {
                GlobalScope.launch(Dispatchers.Main){
                    Toast.makeText(
                        this@MainActivity,
                        "Request Failed",
                        Toast.LENGTH_SHORT
                    ).show()
                }
            }
        }
    }
    private fun printUsers(users: List<UserResponse.User>) {
        val lvPeople=findViewById<ListView>(R.id.lvPeople)
        lvPeople.adapter = ArrayAdapter<String>(
            this,
            android.R.layout.simple_list_item_1,
            android.R.id.text1,
            users.map { it.firstName }
        )
    }
}
 

UserInterface.kt

 interface ResqResAPI {
    @GET("users?")
    suspend fun getUsers(
        @Query("page")page:Int=1
    ):Response<UserResponse>
}
 

UserResponse.kt

 @Keep
data class UserResponse(
    @SerializedName("data") val users: List<User>,
    @SerializedName("page") val page: Int,
    @SerializedName("per_page") val perPage: Int,
    @SerializedName("total") val total: Int,
    @SerializedName("total_pages") val totalPages: Int
) {
    @Keep
    data class User(
        @SerializedName("avatar") val avatar: String,
        @SerializedName("email") val email: String,
        @SerializedName("first_name") val firstName: String,
        @SerializedName("id") val id: Int,
        @SerializedName("last_name") val lastName:String
    )
}
 

Этот код основан на сопрограммах, поэтому я хочу сохранить это без изменений
Когда я запускаю код в своем эмуляторе, он показывает сбой запроса.Каково решение этой проблемы?Я абсолютный новичок, поэтому не могли бы вы объяснить мне простыми словами

Ответ №1:

вы должны проверить свое разрешение в манифесте на использование Интернета или запроса по адресу. время выполнения… Перейдите в свое приложение manifest.xml:

 <manifest xlmns:android...>
 ...
 <uses-permission android:name="android.permission.INTERNET" />
 <application ...
</manifest>
 

Возможно, вы захотите взглянуть на это:

https://developer.android.com/training/basics/network-ops/connecting?authuser=1
https://developer.android.com/training/permissions/requesting?hl=pt-br