api - 改造 2 获取 Github 用户 API 总是返回 null
问题描述
我试图从https://github.com/users获取 json 。我想显示用户名:yehezkiell,如https://github.com/yehezkiell。改造显示成功结果,但始终返回 null。我是这次改造的新手,请帮忙
这是我的代码
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)
}
}
用户.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
}
解决方案
对于调试过程,不是Users
在响应后立即反序列化到对象,我们应该做这样的事情吗?:
- 首先将其反序列化为纯字符串。
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?
)
推荐阅读
- python - staticmethod 对象描述的含义?
- mysql - 在 MySQL 查询中重复 COUNT(*) 是否昂贵?
- angular - ng add @angular/fire '服务器错误。证书已过期'
- perl - 如何强制 perl 仅从标准输入而不是从命令行上的文件处理 args?
- cypress - 如何将 @babel/plugin-proposal-nullish-coalescing-operator 添加到 Cypress.io 命令?
- node.js - “@”在“@/assets/xyz”之类的路径中代表什么?
- sql - 如何从 Oracle SQL Developer 中的数据库差异中排除 ISEQ$$ 值?
- angular - 如何根据单元格中的值更改 mat-table 中 mat-icon 的颜色
- python - 为什么我的基本指数函数不起作用?
- github - 如何让我的 Heroku 应用程序可供拥有该链接的其他人查看?