首页 > 解决方案 > 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()
            }
        })
    }

标签: androidkotlinloopj

解决方案


您获得的当前响应不包含 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

然后,您可以选择从第一个响应或第二个响应中获取其余数据,因为两者都包含该信息。

我希望这有帮助。


推荐阅读