如何使用方括号加载 JSON 数据
Posted
技术标签:
【中文标题】如何使用方括号加载 JSON 数据【英文标题】:How to load JSON data with square bracket 【发布时间】: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()
【问题讨论】:
【参考方案1】:我看到你尝试在改造中使用协程,我建议你不要使用 Response,将其改为调用并移除挂起。
interface APIRequest
@GET("character/random")
fun getInfo() : Call<List<ResponseBB>>
在您的全局范围内,您可以这样称呼它:
GlobalScope.launch
try
val response = Client.api.getInfo().await()
catch(e:Exception)
你可以在改造和gson Converter中使用2.9.0版本
【讨论】:
以上是关于如何使用方括号加载 JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 AngularJS 从其他域(无回调函数)加载 JSON 数据对象