首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android JsonObject Error org.json.JSONException:无值

Android JsonObject Error org.json.JSONException:无值
EN

Stack Overflow用户
提问于 2018-01-13 06:25:34
回答 3查看 3.8K关注 0票数 0

在java for Android中读取JSON字符串时,当有要查找的值时,会给出错误No value find。json字符串来自(http://ddragon.leagueoflegends.com/cdn/7.24.1/data/en_US/champion.json)我需要帮助找出读取JSON字符串时出错的地方。

我得到的错误如下所示。

代码语言:javascript
运行
复制
W/System.err: org.json.JSONException: No value for Aatrox
W/System.err:     at org.json.JSONObject.get(JSONObject.java:389)
W/System.err:     at com.icyrelic.lolsummoner.api.LeagueAPI$3.onSuccess(LeagueAPI.java:146)
W/System.err:     at com.icyrelic.lolsummoner.api.LeagueAPI$1.onResponse(LeagueAPI.java:51)
W/System.err:     at com.icyrelic.lolsummoner.api.LeagueAPI$1.onResponse(LeagueAPI.java:41)
W/System.err:     at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:78)
W/System.err:     at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30)
W/System.err:     at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:106)
W/System.err:     at android.os.Handler.handleCallback(Handler.java:751)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
W/System.err:     at android.os.Looper.loop(Looper.java:154)
W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:6776)
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)

来自LeagueAPI.java的代码

代码语言:javascript
运行
复制
public static void createRequest(String url, final VolleyCallback callback) {



    final StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    try {

                        Object json = new JSONTokener(response).nextValue();


                        if(json instanceof JSONObject) {
                            callback.onSuccess(new JSONObject(response));
                        } else if(json instanceof  JSONArray) {
                            callback.onSuccess(new JSONArray(response));
                        } else {
                            throw new Exception("Unknown JSON");
                        }



                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            error.printStackTrace();
        }
    });
    queue.add(stringRequest);
}

private void setupChampionData() {
    createRequest("http://ddragon.leagueoflegends.com/cdn/7.24.1/data/en_US/champion.json", new VolleyCallback() {
        @Override
        public void onSuccess(Object response) {
            JSONObject json = ((JSONObject) response);
            try {
                JSONObject champions = json.getJSONObject("data");


                Iterator<String> temp = champions.keys();
                System.out.println(json.toString());
                while (temp.hasNext()) {
                    String key = temp.next();

                    JSONObject value = ((JSONObject) json.get(key));

                    championData.put(value.getInt("key"), value);

                }




            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-13 11:20:11

您正在从错误的对象中读取值。尝尝这个

代码语言:javascript
运行
复制
                JSONObject value = ((JSONObject) champions.get(key));

而不是

代码语言:javascript
运行
复制
                JSONObject value = ((JSONObject) json.get(key));
票数 1
EN

Stack Overflow用户

发布于 2018-01-13 14:24:25

代码语言:javascript
运行
复制
JSONObject jsonObjectRoot = new JSONObject("Your_Json");
JSONObject jsonObjectData = jsonObjectRoot.getJSONObject("data");
JSONObject jsonObjectAtrox = jsonObjectData.getJSONObject("Aatrox");
JSONObject jsonObjectAtroxInfo = jsonObjectAtrox.getJSONObject("info");

以此类推。

票数 1
EN

Stack Overflow用户

发布于 2018-01-13 07:10:02

代码语言:javascript
运行
复制
"type":"champion",
"format":"standAloneComplex",
"version":"7.24.1",
"data":{  
"Aatrox":{  },
"Ahri":{  },
}..     

如果您看到json响应"Aatrox“在数据对象中为JSONObject。修改对象读取器。你可能会得到它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48234859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档