android - Android:JSON 对象 getString
问题描述
我使用这个 JSON https://api.github.com/users
我需要获取字符串名称、关注者、关注者等。但是在程序上说“名称没有价值”。我想我需要去一个特定的用户示例:https ://api.github.com/users/mojombo来获取该信息,但我不知道如何。
我使用 loopj 库。
这是我的代码
private fun getDataGitDetail() {
progressBar.visibility = View.VISIBLE
val client = AsyncHttpClient()
client.addHeader("Authorization", "token 6fe9dff2e5e43d25eb3abe9ff508a750b972f725")
client.addHeader("User-Agent", "request")
val url = "https://api.github.com/users"
client.get(url, object : AsyncHttpResponseHandler() {
override fun onSuccess(
statusCode: Int,
headers: Array<Header>,
responseBody: ByteArray
) {
progressBar.visibility = View.INVISIBLE
val result = String(responseBody)
Log.d(TAG, result)
try {
val jsonArray = JSONArray(result)
for (i in 0 until jsonArray.length()) {
val jsonObject = jsonArray.getJSONObject(i)
val username: String? = jsonObject.getString("login")
val name: String? = jsonObject.getString("name")
val avatar: String? = jsonObject.getString("avatar_url")
val company: String? = jsonObject.getString("url")
val location: String? = jsonObject.getString("url")
val repository: Int = 0
val followers: Int = 0
val following: Int = 0
listData.add(
Data(
username,
name,
avatar,
company,
location,
repository,
followers,
following
)
)
}
showRecyclerList()
} catch (e: Exception) {
Toast.makeText(this@MainActivity, e.message, Toast.LENGTH_SHORT)
.show()
e.printStackTrace()
}
}
override fun onFailure(
statusCode: Int,
headers: Array<Header>,
responseBody: ByteArray,
error: Throwable
) {
progressBar.visibility = View.INVISIBLE
val errorMessage = when (statusCode) {
401 -> "$statusCode : Bad Request"
403 -> "$statusCode : Forbidden"
404 -> "$statusCode : Not Found"
else -> "$statusCode : ${error.message}"
}
Toast.makeText(this@MainActivity, errorMessage, Toast.LENGTH_LONG)
.show()
}
})
}
解决方案
您获得的当前响应不包含 JSONObject 中的键名。如果您想要所有用户的名称,则必须转到 api 中的每个用户端点。您需要在 for 循环中发出另一个请求,从https://api.github.com/users/mojombo等端点获取数据
val jsonArray = JSONArray(result)
for (i in 0 until jsonArray.length()) {
val jsonObject = jsonArray.getJSONObject(i)
val username: String? = jsonObject.getString("login")
//Make the request here using "https://api.github.com/users/" + login
然后,您可以选择从第一个响应或第二个响应中获取其余数据,因为两者都包含该信息。
我希望这有帮助。
推荐阅读
- c# - 使用 LinqToTwitter 与 Twitter direct_messages/events 进行异步和等待
- python-3.x - 添加 tkinter 接口后无法运行我的应用程序
- python - PySpark - 将列表作为参数传递给 UDF + 迭代数据框列添加
- reporting-services - SSRS:参数值的组合框在预览中不起作用
- c++ - 必须在 C++ 中将 c_str 用于 strchr 吗?
- azure - 从虚拟网关中删除点到站点
- c# - WPF XAML 数据触发器内容模板
- javascript - 在 Firebase 中处理用户的在线和离线状态
- sql - 如何在 SQL Server 中查看函数的内容/描述
- asp.net - 如何使用 Roslyn 解析 aspx 和 ascx 文件