-1
votes

Itération d'un JSONObject ne remplit pas la fileuse

J'ai un problème que je ne peux pas comprendre i.e quand je fais une demande HTTP, je reçois la suite de JSONObject comme réponse. Je dois boucler toutes les clés, prendre les données dont j'ai besoin, les construire dans un objet et remplir la spinner, mais je pense que quelque chose ne va pas dans la boucle ou je ne sais pas, causer quand je prends chaque objet, Seul sans boucle, tout fonctionne bien, Lorsque je boucle pour construire des objets et ajouter à la liste des array de manière dynamique, cela ne fonctionne pas:

    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();
    }
}


1 commentaires

Ajoutez des points d'arrêt et vérifiez si votre liste est vide ou non


3 Réponses :


0
votes

Votre JSON n'est pas valide

{
    "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
        }
    }
}


0 commentaires

0
votes

Vous devez tester votre API de repos sur Postman avant de l'intégrer dans l'application Android et utilisez GSON Bibliothèque, modèle de réponse pour gérer toute la réponse JSON. La bibliothèque GSON analyse automatiquement les données selon votre modèle afin que vous n'ayez pas besoin d'obtenir des données en spécifiant une clé individuelle.


0 commentaires

0
votes

Je pense que votre algorithme d'analyse a un problème.

Iterator keys = jsonObject.keys();


0 commentaires