Я могу разобрать JsonObject, но возникли некоторые трудности с JsonArray с использованием библиотеки залпа - PullRequest
0 голосов
/ 18 мая 2018

Я хочу получить данные из свойств 'number' и 'step', но не могу найти решение.Я новичок в Android, поэтому буду очень признателен за вашу помощь

** Вот JSON ** https://api.myjson.com/bins/135pdu

Вот мой код

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);
                                for(int i = 0; i<response.length();i++){

                                    JSONObject current = response.getJSONObject(i);
                                    JSONArray arrayStatus = current.getJSONArray("steps");
                                    for(int a = 0; a<arrayStatus.length(); a++){
                                        JSONObject recipe_step = arrayStatus.getJSONObject(i);
                                        count = recipe_step.getString("number");
                                        step = recipe_step.getString("step");

                                        steps.append("Step " +count+":"+step+"\n\n");
                                    }
                                }
                            }catch(JSONException e){
                                e.printStackTrace();
                            }
                        }

                    }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.e("VolleyError", error.toString());
                }

Ответы [ 3 ]

0 голосов
/ 18 мая 2018
  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);
                            for(int i = 0; i<response.length();i++){

                                JSONObject current = response.getJSONObject(i);
                                JSONArray arrayStatus = current.getJSONArray("steps");
                                for(int a = 0; a<arrayStatus.length(); a++){
                                    JSONObject recipe_step = arrayStatus.getJSONObject(i);
                                    count = recipe_step.getInt("number")+"";
                                    step = recipe_step.getString("step");

                                    steps.append("Step " +count+":"+step+"\n\n");
                                }
                            }
                        }catch(JSONException e){
                            e.printStackTrace();
                        }
                    }

                }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("VolleyError", error.toString());
            }

используйте getInt () для чисел

0 голосов
/ 18 мая 2018

Я верю в умную работу вместо долгой работы.

Я предпочитаю 2-строчный код для анализа вместо написания целых вещей для анализа JSON.

Type listType = new TypeToken<List<Response>>() {}.getType();
List<Response> yourList = new Gson().fromJson(yourJson, listType);

Теперь все значения в вашем списке, используйте его где угодно:)

Google Gson - это хорошо известная библиотека для анализа json.Просто добавьте небольшую библиотеку implementation 'com.google.code.gson:gson:2.8.4' на уровень вашего приложения build.gradle.

Вот и все, вам просто нужно создать классы pojo (или модель), которые будут содержать переменные вашего ответа.

----------------------------------- com.example.Equipment.java -----------------------------------

package com.example;


public class Equipment {

private Integer id;
private String name;
private String image;

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getImage() {
return image;
}

public void setImage(String image) {
this.image = image;
}

}

----------------------------------- com.example.Ingredient.java -----------------------------------

package com.example;


public class Ingredient {

private Integer id;
private String name;
private String image;

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getImage() {
return image;
}

public void setImage(String image) {
this.image = image;
}

}

----------------------------------- com.example.Response.java -----------------------------------

package com.example;

import java.util.List;

public class Response {

private String name;
private List<Step> steps = null;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public List<Step> getSteps() {
return steps;
}

public void setSteps(List<Step> steps) {
this.steps = steps;
}

}

----------------------------------- com.example.Step.java-----------------------------------

package com.example;

import java.util.List;

public class Step {

private Integer number;
private String step;
private List<Ingredient> ingredients = null;
private List<Equipment> equipment = null;

public Integer getNumber() {
return number;
}

public void setNumber(Integer number) {
this.number = number;
}

public String getStep() {
return step;
}

public void setStep(String step) {
this.step = step;
}

public List<Ingredient> getIngredients() {
return ingredients;
}

public void setIngredients(List<Ingredient> ingredients) {
this.ingredients = ingredients;
}

public List<Equipment> getEquipment() {
return equipment;
}

public void setEquipment(List<Equipment> equipment) {
this.equipment = equipment;
}

}
0 голосов
/ 18 мая 2018

count = recipe_step.getString("number");

номер шага - целое число, а не строка:

int count; count = recipe_step.getInt("number");

...