【问题标题】:json exception with primitive array原始数组的json异常
【发布时间】:2020-12-12 12:10:39
【问题描述】:

我正在调用我的本地主机,当然,此 android 应用程序的所有权限都已到位。关于从字符串解析 json 的任何建议

fun findAll(): ArrayList<User>? {
    val url = URL("http:///10.0.2.2:8080/employees")
    val connection = url.openConnection() as HttpURLConnection
    connection.setRequestProperty("Accept", "application/json");

    var users = arrayListOf<User>()
    (if (connection.responseCode == 200) connection.inputStream else connection.errorStream).use { stream ->
        BufferedReader(InputStreamReader(stream)).use { reader ->
            var line: String?
            val response = StringBuffer()

            while ((reader.readLine().also { line = it }) != null) {
                response.append(line)
            }

            
            val jsonArray = JSONArray(response)
            for (i in 0 until jsonArray.length()) {
                val user = jsonArray.getJSONObject(i)
            }
        }
    }

    return users
}

用户数据类

data class User(var id: Long?, var first: String?, var last: String?): Parcelable 

问题出在这一行

val jsonArray = JSONArray(response)

org.json.JSONException:不是原始数组:类 java.lang.StringBuffer

【问题讨论】:

    标签: android httpurlconnection


    【解决方案1】:

    来自Android Documentation

    public JSONArray (Object array)
    

    使用给定原始数组中的值创建一个新的 JSONArray。

    根本原因

    val jsonArray = JSONArray(response)
    

    responseStringBuffer 的一个实例而不是数组,这就是编译器抛出错误的原因。

    解决方案

    改用JSONArray(String) 构造函数。

    val jsonArray = JSONArray(response.toString())
    

    【讨论】:

      猜你喜欢
      • 2021-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-19
      • 2021-09-28
      • 2014-04-25
      相关资源
      最近更新 更多