【问题标题】:How to get data from JSONArray如何从 JSONArray 中获取数据
【发布时间】:2019-04-11 13:58:59
【问题描述】:

我是 android 编程新手,我正在尝试从这个 JSON 中获取数据

{
  "user": {
    "username": "justin",
    "private": false,
    "name": "Justin Nemeth",
    "vip": true,
    "vip_ep": false,
    "ids": {
      "slug": "justin"
    },
    "gender": "male",
    "age": 32,
    "images": {
      "avatar": {
        "full": 
"https://secure.gravatar.com/avatar/30c2f0dfbc39e48656f40498aa871e33?r=pg&s=256"
      }
    }
}

我只需要得到"username""full"

我尝试使用jsonObject.getString("username"),但它不起作用,我做了更多研究,发现我应该使用JSONArray,但我尝试了它,它仍然不适合我。我知道我做错了什么,但我不知道是什么。

这是我的代码

final JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
            Request.Method.GET,
            userDetailsUri,
            null,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {

                    try {

                        JSONObject mainObject = new JSONObject(response);
                        JSONArray resArray = mainObject.getJSONArray("user");

                        for (int i = 0; i < resArray.length(); i++) {

                            JSONObject jsonObject = resArray.getJSONObject(i);

                            UserDetails userDetails = new UserDetails();
                            userDetails.setUsername(jsonObject.getString("username"));
                            userDetails.setProfile_image(jsonObject.getString("full"));

                        }

                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.i("vkv", "getUserDetails() " + error.toString());
                }
            })
    {
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {

            Map<String, String> headers = new HashMap<String, String>();
            headers.put("Content-Type", "application/json");
            headers.put("Authorization", "Bearer " + access_token);
            headers.put("trakt-api-version", "2");
            headers.put("trakt-api-key", client_id);
            return headers;
        }
    };
    requestQueue.add(jsonObjectRequest);

【问题讨论】:

  • 好吧,一开始你并没有使用包含服务器响应的response。其次,您发布的 JSON 中没有数组,只有对象。
  • 对不起..response 包含在原始代码中。我只需要重新输入它,因为我正在尝试其他不同的代码。但是我该如何获取数据呢?

标签: android json android-volley


【解决方案1】:

user 是 JsonObject 而不是 JsonArray,因此您可以像下面这样获取名称和完整信息

       JSONObject mainObject = new JSONObject();

        JSONObject jobjUser =mainObject.getJSONObject("user");

        String username=jobjUser.getString("username");

        JSONObject jobjImages=mainObject.getJSONObject("images");
        JSONObject jobjAvatar=jobjImages.getJSONObject("avatar");
        String full=jobjAvatar.getString("full");

【讨论】:

  • @tony 请检查并告诉我您是否需要任何东西
  • 它不起作用。非常感谢您的帮助
  • 它给了我这个错误com.android.volley.AuthFailureError,但如果我只记录response.toString,它不会给我这个错误,而是给我JSON结果。
【解决方案2】:

虽然我在使用上述答案后仍然有错误,但我还是以此为基础来解决我的问题。这是代码

JSONObject mainObject = new JSONObject(response.toString());
                        JSONObject jsonObject = mainObject.getJSONObject("user");
                        JSONObject object = jsonObject.getJSONObject("images");
                        JSONObject jsonObject1 = object.getJSONObject("avatar");

                        String image = jsonObject1.getString("full");
                        String username = jsonObject.getString("username");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 2017-03-09
    相关资源
    最近更新 更多