使用Volley请求Blynk接口时JSONArray无法转JSONObject错误如何解决
问题原因分析
- 你调用的Blynk API返回的响应结构是
["1"],属于JSON数组类型,但你使用了JsonObjectRequest发起请求,该类默认要求服务端返回JSON对象(即{}包裹的结构),Volley底层在做响应类型转换时直接抛出了类型不匹配异常。 - 你的解析逻辑也和实际返回结构不匹配:返回的数组没有
test字段,且数组内的元素是纯字符串"1",不是嵌套的JSON对象,你调用getJSONArray("test")、getJSONObject(i)的操作都不符合实际数据结构。
解决方案
把请求类替换为适配JSON数组的JsonArrayRequest,同时改写对应的解析逻辑即可,修改后的代码如下:
private fun jsonParse() { val url = "http://blynk-cloud.com/4ae3851817194e2596cf1b7103603ef8/get/D8" // 替换为JsonArrayRequest适配数组类型响应 val request = JsonArrayRequest(Request.Method.GET, url, null, { response -> try { // 直接遍历返回的数组即可,无需额外取字段 for (i in 0 until response.length()) { // 数组元素为字符串,直接取值即可 val status = response.getString(i) textView.append(status) } } catch (e: JSONException) { e.printStackTrace() } }, { error -> error.printStackTrace() }) requestQueue?.add(request) }
内容的提问来源于stack exchange,提问作者Last Cube
相关产品推荐
相关产品推荐

