Android新手求助:Volley解析JsonArray获取number和step字段问题
解决Volley解析JSONArray获取number和step的问题
别担心,作为Android新手遇到这种JSON解析问题太正常了,我帮你找出代码里的问题并修正它!
你的代码核心问题
你在内层遍历steps数组的时候,错误地使用了外层循环的变量i,而不是内层的a——这会导致要么取到错误的数据,要么直接抛出数组越界的JSONException。具体就是这行代码出了问题:
JSONObject recipe_step = arrayStatus.getJSONObject(i);
应该用内层循环的变量a来索引steps数组才对。
修正后的完整代码
JsonArrayRequest request = new JsonArrayRequest(Request.Method.GET, uri, null, new Response.Listener<JSONArray>() { @Override public void onResponse(JSONArray response) { String count, step; try { Log.d("VolleyResponse","Response:" + response); // 遍历外层的食谱JSONArray for(int i = 0; i < response.length(); i++){ JSONObject currentRecipe = response.getJSONObject(i); // 获取当前食谱的steps数组 JSONArray stepsArray = currentRecipe.getJSONArray("steps"); // 遍历steps数组里的每一步 for(int a = 0; a < stepsArray.length(); a++){ // 这里必须用内层的a来索引steps数组,不能用外层的i! JSONObject stepObj = stepsArray.getJSONObject(a); count = stepObj.getString("number"); step = stepObj.getString("step"); steps.append("Step " + count + ":" + step + "\n\n"); } } } catch(JSONException e){ e.printStackTrace(); Log.e("JsonParseError", "解析出错:" + e.getMessage()); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e("VolleyError", error.toString()); } } );
给Android新手的小提示
- 给变量起更清晰的名字,比如把
current改成currentRecipe,arrayStatus改成stepsArray,这样代码可读性更高,也不容易搞混循环变量。 - 在catch块里加上错误信息日志,能帮你快速定位解析时的具体问题(比如某个字段不存在、类型不匹配)。
- 如果
steps是TextView这类UI组件,不用担心线程问题——Volley的onResponse方法本来就在主线程里执行,直接更新UI没问题。
内容的提问来源于stack exchange,提问作者WeGo Badump
相关产品推荐
相关产品推荐

