2017-10-12 4 views
1

J'ai un fichier json qui a un tableau de JSONObject, après l'avoir lu et converti en chaîne, je veux créer un ArrayList d'objets Java, voici mon code jusqu'à présent:Comment faire deJson de Gson créer arraylilst d'objet

ArrayList<CountryCode> arrayList; 
arrayList = new ArrayList<CountryCode>(); 
try { 
     InputStream ims = context.getResources().getAssets().open("json/" + "countryCodes.json"); 
     reader = new InputStreamReader(ims); 
     int size = ims.available(); 
     byte[] buffer = new byte[size]; 
     ims.read(buffer); 
     ims.close(); 
     json = new String(buffer, "UTF-8"); 
     arrayList = gson.fromJson(json , ArrayList.class); 
     Log.i("countrycode", String.valueOf(arrayList.get(0).getCode())); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

où est CountryCode classe modèle a des champs pour le nom, countrycode, qui est une carte de JSONObjects (chaque objet JSON a le nom et countrycode)

Obtenir erreur:

ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to com.myhealthathand.hah.objects.CountryCode

+0

fournir plus de détails comme json string et CountryCo de classe. –

Répondre

1

Vous devez définir la liste des types comme ceci:

Type listType = new TypeToken<ArrayList<CountryCode>>(){}.getType(); 

arrayList = new Gson().fromJson(json, listType); 
+0

qu'est ce que listType? – blackHawk

+0

Son Définir le type de ArrrayList que vous voulez convertir, dans votre cas son ArrayList

+0

Essayez ce code, il va bien fonctionner –

0

Se reporter code suivant

**List<CountryCode> arrayList; 

Type collectionType = new TypeToken<List<CountryCode>>() {}.getType();** 

try { 
    InputStream ims = context.getResources().getAssets().open("json/" + "countryCodes.json"); 
    reader = new InputStreamReader(ims); 
    int size = ims.available(); 
    byte[] buffer = new byte[size]; 
    ims.read(buffer); 
    ims.close(); 
    json = new String(buffer, "UTF-8"); 

    **arrayList = new Gson().fromJson(json, collectionType);** 

    Log.i("countrycode", String.valueOf(arrayList.get(0).getCode())); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
+0

Voilà ce que j'ai déjà répondu –

0

Utilisation TypeToken au lieu de ArrayList.class

Gson gson = new Gson(); 
Type type = TypeToken.getParameterized(ArrayList.class, CountryCode).getType(); 
ArrayList<ArrayObject> arrayList = gson.fromJson(json, type); 

cela fonctionne aussi si gson est au-dessus 2.8.0