Итерация JSONObject не заполняет счетчик - PullRequest
0 голосов
/ 30 октября 2019

У меня есть проблема, которую я не могу понять, т.е. когда я делаю http-запрос, я получаю следующий JSONObject в качестве ответа. Я должен циклически повторять все ключи, брать необходимые данные, строить их в объекте и заполнять счетчик, но я думаю, что в цикле что-то не так, или я не знаю, потому что, когда я беру каждый объект,один без цикла, все работает нормально, когда я зацикливаюсь, чтобы построить объект и динамически добавить в список массивов, он не работает:

{
    "Conteggio": 2,
    "0": {
        "Distributore Information": {
            "id_distributore": "1",
            "NomeDistributore": "Colonnina 0",
            "litriiniziocolonna": "444",
        }
    },
    "1": {
        "Distributore Information": {
            "id_distributore": "2",
            "NomeDistributore": "Colonnina 1",
            "litriiniziocolonna": "555",
        }
    }
}

Я знаю, что это неправильный цикл через JSONObject, но я не могу изменить этоJSON.

Вот код андроида:

    private void getInfoColonnina(){
    String url = "https://icantshowtheurlbutitworkfine_module.json";
    final SharedPreferences myPref = getSharedPreferences("loginPref", MODE_PRIVATE);
    final SharedPreferences.Editor myPreff = myPref.edit();

    RequestQueue requestQueue = Volley.newRequestQueue(this);
    StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            List<DistrBean> distrBeansList = new ArrayList<>();

            try {

                JSONObject jsonObject = new JSONObject(response);
                Iterator keys = jsonObject.keys();

                while (keys.hasNext()) {
                    Object key = keys.next();
                    JSONObject value = jsonObject.getJSONObject((String) key);
                    JSONObject info = value.getJSONObject("Distributore Information");
                    String LitriColonnina1 = info.getString("litriiniziocolonna");
                    String NomeDistributore1 = info.getString("NomeDistributore");
                    String id_distributore1 = info.getString("id_distributore");

                    DistrBean distrBean = new DistrBean();

                    distrBean.setLitriColonnina(LitriColonnina1);
                    distrBean.setNomeDistributore(NomeDistributore1);
                    distrBean.setIdDistributore(id_distributore1);

                    distrBeansList.add(distrBean);

                }

                ArrayAdapter<DistrBean> adapter = new ArrayAdapter<DistrBean>(InizioTurnoActivity.this, android.R.layout.simple_spinner_item, distrBeansList);
                adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                spinner.setAdapter(adapter);
                spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                    @Override
                    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                        DistrBean distrBean = (DistrBean) adapterView.getSelectedItem();
                        getSelectedDistr(distrBean);
                    }

                    @Override
                    public void onNothingSelected(AdapterView<?> adapterView) {

                    }
                });
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            error.printStackTrace();
            Toast.makeText(InizioTurnoActivity.this, "CHIAMATA INFOCOLONNINA FALLITA", Toast.LENGTH_SHORT).show();
        }
    });
    requestQueue.add(stringRequest);
    }

    public void getSelectedDistr(DistrBean v){
        DistrBean distrBean = (DistrBean) spinner.getSelectedItem();
        setDistrData(distrBean);
    }

    private void setDistrData(DistrBean distrBean){
        String name = distrBean.getNomeDistributore();
        String litri = distrBean.getLitriColonnina();
        String id = distrBean.getIdDistributore();

        tvProgressivo.setText(litri);
        tvColonnina.setText(name);

        Toast.makeText(this, "Hai selezionato " + name +  "che ha litri: " + litri, Toast.LENGTH_LONG).show();
    }
}

Можете ли вы, ребята, помочь мне? заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 31 октября 2019

Перед тем, как интегрировать его в приложение для Android, вы должны проверить свой API для отдыха на почтальоне и использовать библиотеку Gson, модель ответа для обработки всех ответов json. Библиотека Gson автоматически анализирует данные в соответствии с вашей моделью, поэтому вам не нужно получать данные, указав индивидуальный ключ.

0 голосов
/ 01 ноября 2019

Я думаю, что у вашего алгоритма разбора есть проблема.

Iterator keys = jsonObject.keys();

-> Conteggio, 0, 1
Так что вы должны пропустить один.

0 голосов
/ 30 октября 2019

Ваш JSON недействителен

{
    "Conteggio": 2,
    "0": {
        "Distributore Information": {
            "id_distributore": "1",
            "NomeDistributore": "Colonnina 0",
            "litriiniziocolonna": "444", //this line
        }
    },
    "1": {
        "Distributore Information": {
            "id_distributore": "2",
            "NomeDistributore": "Colonnina 1",
            "litriiniziocolonna": "555", //this line
        }
    }
}
...