【发布时间】:2021-09-19 07:51:20
【问题描述】:
我正在从 Breaking bad API https://www.breakingbadapi.com/api/character/random 调用数据 我无法获取数据。我认为这是因为主响应文件有方括号,我需要先调用它。但我不知道怎么称呼它。我能得到一些帮助吗?
这是我的 API 接口
interface APIRequest {
@GET("character/random")
suspend fun getInfo() : Response<List<ResponseBB>>
}
ResponseBB 类
data class ResponseBB(
@field:SerializedName("ResponseBB")
val responseBB: List<ResponseBBItem?>? = null
)
data class ResponseBBItem(
@field:SerializedName("birthday")
val birthday: Any? = null,
@field:SerializedName("img")
val img: String? = null,
@field:SerializedName("better_call_saul_appearance")
val betterCallSaulAppearance: Any? = null,
@field:SerializedName("occupation")
val occupation: List<String?>? = null,
@field:SerializedName("appearance")
val appearance: List<Int?>? = null,
@field:SerializedName("portrayed")
val portrayed: String? = null,
@field:SerializedName("name")
val name: String? = null,
@field:SerializedName("nickname")
val nickname: String? = null,
@field:SerializedName("char_id")
val charId: Int? = null,
@field:SerializedName("category")
val category: String? = null,
@field:SerializedName("status")
val status: String? = null
)
客户对象
object Client {
val gson = GsonBuilder().create()
val retrofit = Retrofit.Builder()
.baseUrl("https://www.breakingbadapi.com/api/")
.addConverterFactory(GsonConverterFactory.create(gson))
.build()
val api = retrofit.create(APIRequest::class.java)
}
这是我在主要活动中调用结果的函数
class MainActivity : AppCompatActivity() {
private var TAG = "MainActivity"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
getCharacterInfo()
linearLayout.setOnClickListener {
getCharacterInfo()
}
}
private fun getCharacterInfo() {
GlobalScope.launch(Dispatchers.IO) {
try {
val response = Client.api.getInfo()
if (response.isSuccessful) {
val data = response.body()
Log.d(TAG, data.toString())
withContext(Dispatchers.Main) {
Picasso.get().load(data!!.img).into(ivImage)
tvName.text = data.name
tvOccupation.text = data.toString()
tvActor.text = data.toString()
tvAppearance.text = data.appearance.toString()
tvStatus.text = data.status
}
}
}
catch (e:Exception){
withContext(Dispatchers.Main){
Toast.makeText(applicationContext, "Cannot Load Data" , Toast.LENGTH_LONG).show()
}
}
}
}
}
【问题讨论】:
标签: android json api kotlin retrofit