【问题标题】:How to load JSON data with square bracket如何使用方括号加载 JSON 数据
【发布时间】: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


    【解决方案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版本

    【讨论】:

      猜你喜欢
      • 2017-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-24
      • 1970-01-01
      • 2017-04-12
      • 1970-01-01
      • 2016-03-28
      相关资源
      最近更新 更多