json 原始数组异常
json exception with primitive array
我正在打电话给我的本地主机,当然我已经为这个 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
}
用户数据class
data class User(var id: Long?, var first: String?, var last: String?): Parcelable
问题出在这一行
val jsonArray = JSONArray(response)
org.json.JSONException: Not a primitive array: class
java.lang.StringBuffer
public JSONArray (Object array)
Creates a new JSONArray with values from the given primitive array.
根本原因
val jsonArray = JSONArray(response)
response
是 StringBuffer
的实例而不是数组,这就是编译器抛出错误的原因。
解决方案
改为使用 JSONArray(String) 构造函数。
val jsonArray = JSONArray(response.toString())
我正在打电话给我的本地主机,当然我已经为这个 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
}
用户数据class
data class User(var id: Long?, var first: String?, var last: String?): Parcelable
问题出在这一行
val jsonArray = JSONArray(response)
org.json.JSONException: Not a primitive array: class java.lang.StringBuffer
public JSONArray (Object array)
Creates a new JSONArray with values from the given primitive array.
根本原因
val jsonArray = JSONArray(response)
response
是 StringBuffer
的实例而不是数组,这就是编译器抛出错误的原因。
解决方案
改为使用 JSONArray(String) 构造函数。
val jsonArray = JSONArray(response.toString())