【问题标题】:Retrofit response is always null改造响应始终为空
【发布时间】:2020-07-23 03:23:13
【问题描述】:

我正在尝试从 gitHub Api 获取用户名,但改造响应总是返回 null。当我试图在 toast 中显示用户名时,我看到:null。我尝试改变改造路径,但没有奏效。一切看起来都很好,但我不知道为什么我总是收到这个错误。

interface GitHubApi{

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

companion object Factory {
    fun getClient(): GitHubApi {
        val url = "https://api.github.com/"

        val interceptor = HttpLoggingInterceptor()
            .apply { level = HttpLoggingInterceptor.Level.BODY }

        val okHttpClient = OkHttpClient.Builder()
            .addInterceptor(interceptor)
            .build()

        val retrofit = Retrofit.Builder()
            .baseUrl(url)
            .addConverterFactory(GsonConverterFactory.create())
            .client(okHttpClient)
            .build()

        return retrofit.create(GitHubApi::class.java)
    }
}}

用户模型:

data class User(val userName: String)

主活动:

    private fun createApiService() : GitHubApi{
    val url = "https://api.github.com/"

    val interceptor = HttpLoggingInterceptor()
        .apply { level = HttpLoggingInterceptor.Level.BODY }

    val okHttpClient = OkHttpClient.Builder()
        .addInterceptor(interceptor)
        .build()

    val retrofit = Retrofit.Builder()
        .baseUrl(url)
        .addConverterFactory(GsonConverterFactory.create())
        .client(okHttpClient)
        .build()

    return retrofit.create(GitHubApi::class.java)
}

private fun loadData() {
    val api  = GitHubApi.getClient()

    api.getUser("fabpot").enqueue(object : Callback<User> {
        override fun onFailure(call: Call<User>, t: Throwable) {
            t.printStackTrace()
        }

        override fun onResponse(
            call: Call<User>,
            response: Response<User>
        ) {
            if (!response.isSuccessful) {
                runOnUiThread { showErrorMessage(response.code().toString()) }
            }

            response.body()?.let { showErrorMessage(it.repoName) }
        }
    })
}

【问题讨论】:

  • 请求时可以粘贴日志吗?

标签: android kotlin retrofit2 okhttp github-api


【解决方案1】:

尝试在您的 @GET 方法中删除开头的斜杠“/”。

【讨论】:

    【解决方案2】:

    github api中不存在key userName。

    尝试以这种方式编辑您的数据类。

    data class User(val name: String)
    

    【讨论】:

      猜你喜欢
      • 2016-03-17
      • 1970-01-01
      • 1970-01-01
      • 2018-05-16
      • 1970-01-01
      • 2016-03-27
      • 2018-12-18
      • 2014-08-13
      • 2011-09-17
      相关资源
      最近更新 更多