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(); } }
3 Réponses :
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 } } }
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. P>
Je pense que votre algorithme d'analyse a un problème.
Iterator keys = jsonObject.keys();
Ajoutez des points d'arrêt et vérifiez si votre liste est vide ou non