Retrofit 2 Get Github Users API всегда возвращает ноль - PullRequest
0 голосов
/ 30 декабря 2018

Я пытался получить json из https://github.com/users. Я хочу показать имя пользователя: yehezkiell вроде https://github.com/yehezkiell. Модификация, показывающая результат успеха, но всегда возвращающая ноль.Я новичок в этой модификации, пожалуйста, помогите

этот мой код

 val postService = DataRepository.create()

    postService.getUser("yehezkiell").enqueue(object : Callback<Users>{
        override fun onFailure(call: Call<Users>?, t: Throwable?) {
            Log.e("retrofitnya","gagal ${t}")
        }

        override fun onResponse(call: Call<Users>?, response: Response<Users>?) {
            Log.e("retrofitnya","berhasil")

            val data = response?.body()
            Log.e("retrofitnya","berhasil ${data?.name}")


        }

    })

Модификация экземпляра

interface RetrofitInstance {

    @GET("users/{username}")
    fun getUser(@Path("username") username:String ): Call<Users>

}

Репозиторий

   object DataRepository {
    fun create(): RetrofitInstance {
        val retrofit = Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl("https://github.com")
                .build()
        return retrofit.create(RetrofitInstance::class.java)
    }
}

Users.kt

open class Users {


    @SerializedName("name")
    @Expose
    open var name: String? = null

    @SerializedName("username")
    @Expose
    open var username: String? = null

    @SerializedName("email")
    @Expose
    open var email: String? = null
}

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

Я решил это сам, на самом деле это мое глупое понимание того, что конечная точка неверна.

In my wrong code
   object DataRepository {
    fun create(): RetrofitInstance {
        val retrofit = Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl("https://github.com")
                .build()
        return retrofit.create(RetrofitInstance::class.java)
    }
}

Эта неправильная конечная точка

https://github.com 

Истинная -

https://api.github.com/
0 голосов
/ 31 декабря 2018

Для процесса отладки, вместо десериализации объекта Users сразу после ответа, мы должны сделать что-то подобное?:

  1. Сначала десериализовать его в обычную строку.
interface RetrofitInstance {

    @GET("users/{username}")
    fun getUser(@Path("username") username: String): Call<String>

}
Просто зарегистрируйте эту строку, чтобы показать, что мы на самом деле получаем.
override fun onResponse(call: Call<String>?, response: Response<String>?) {
    val responseBody = response?.body() ?: ""
    Log.e("retrofitnya","response body as string = ${responseBody}")
}
(Если мы хотим использовать его как Users после этого), сделайте десериализацию вручную.
val user: Users = Gson().fromJson(responseBody, Users::class.java)

Если это не слишком конфиденциально, пожалуйста, дайте нам, как вы заявляете, чтоUsers объект данных, такой как, например, этот Foo и Bar.

data class Foo(
    @SerializedName("bar") val bar: Bar?
)

data class Bar(
    @SerializedName("name") val name: String?
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...