J'ai un ArrayList que j'utilise dans un ArrayAdapter pour un ListView. Je dois prendre les éléments de la liste et les convertir en JSONArray pour les envoyer à une API. J'ai cherché, mais je n'ai rien trouvé qui explique comment cela pourrait fonctionner, toute aide serait appréciée.
MISE À JOUR - SOLUTION
Voici ce que j'ai fini par faire pour résoudre le problème.
Objet dans ArrayList:
public class ListItem {
private long _masterId;
private String _name;
private long _category;
public ListItem(long masterId, String name, long category) {
_masterId = masterId;
_name = name;
_category = category;
}
public JSONObject getJSONObject() {
JSONObject obj = new JSONObject();
try {
obj.put("Id", _masterId);
obj.put("Name", _name);
obj.put("Category", _category);
} catch (JSONException e) {
trace("DefaultListItem.toString JSONException: "+e.getMessage());
}
return obj;
}
}
Voici comment je l'ai converti:
ArrayList<ListItem> myCustomList = .... // list filled with objects
JSONArray jsonArray = new JSONArray();
for (int i=0; i < myCustomList.size(); i++) {
jsonArray.put(myCustomList.get(i).getJSONObject());
}
Et la sortie:
[{"Name":"Name 1","Id":0,"Category":"category 1"},{"Name":"Name 2","Id":1,"Category":"category 2"},{"Name":"Name 3","Id":2,"Category":"category 3"}]
J'espère que cela aidera quelqu'un un jour!
Utilisez la bibliothèque Gson pour convertir ArrayList en JsonArray.
la source
Comme quelqu'un se rend compte que l'OP veut convertir la liste personnalisée en
org.json.JSONArray
pas lecom.google.gson.JsonArray
, la réponse CORRECT devrait être comme ceci:la source
la source
Je sais que c'est déjà répondu, mais il y a une meilleure solution ici, utilisez ce code:
De cette façon, vous pouvez accéder aux variables de la classe sans les saisir manuellement.
Plus vite et mieux .. J'espère que cela vous aidera.
À votre santé. :RÉ
la source
Ajoutez à votre note:
Convertir
ArrayList
enJsonArray
la source
Avec kotlin et Gson, nous pouvons le faire plus facilement:
kotlin
fichier séparé , ajoutez les méthodes suivantesRemarque: n'ajoutez pas de classe declare, ajoutez simplement ces méthodes, tout fonctionnera correctement.
créer une référence de gson:
Pour convertir un tableau en chaîne json, appelez :
Pour obtenir un tableau à partir de la chaîne json, appelez :
Pour convertir un modèle en chaîne json, appelez:
Pour convertir une chaîne json en modèle, appelez:
la source