8
votes

Insérer dynamiquement une chaîne dans une matrice de chaîne dans Android

Je reçois des données en tant que réponse JSON d'un serveur. J'extrise les données dont j'ai besoin et je veux mettre ces données dans une matrice de chaîne. Je ne connais pas la taille des données, je ne peux donc pas déclarer la matrice en tant que statique. Je déclare un tableau de chaînes dynamique: xxx pré>

après cela, j'insère les données de la matrice: p> xxx pré>

mais je reçois le p >

java.lang.ArrayIndexOutOfBoundsException
Caused by: java.lang.ArrayIndexOutOfBoundsException


0 commentaires

3 Réponses :


6
votes

Essayez comme ça

 String stringArray[];        
 stringArray=new String[jArray.length()];
 String xCoords[]=new String[jArray.length()];;

       for (int i=0; i<jArray.length(); i++) {
             JSONObject json_data = jArray.getJSONObject(i);
             xCoords[i] = json_data.getString("xCoord");
       }


4 commentaires

Cela fonctionne lors de l'insertion, mais lorsque j'essaie d'extraire les données de celui-ci avec pour (int i = 0; i Je reçois le 08-04 11: 40: 30.435: Error / AndroidRuntime (1098): java.lang.nullpointereException . Comment puis-je extraire les données?


Vérifier la valeur sur XCOORDS [i] .print un journal pour voir la valeur.is il y a un problème de longueur ou tout simplement parce que XCOORDS [i] n'est pas double valeur?


Le problème est avec la longueur - si je modifie les paramètres du pour {} sur pour (int i = 0; i <10; i ++) L'erreur se déplace vers le Ligne suivante - Double XCOORD = DOUBLE.PARSEDOUBLE (XCOORDS [I]);


Ensuite, vous avez un problème de longueur et aussi à XcoOords [i], ce n'est pas toujours double



40
votes

Utiliser ArrayList Bien que ce ne soit pas vraiment nécessaire, mais juste apprenez-le : xxx


8 commentaires

J'ai essayé avec cela aussi, mais si je tape seulement string [] xcoords = xcoordslist.toarray (); il me donne un type inadaptation: impossible de convertir de l'objet [] à la chaîne [] / Code>, donc je fais la ligne à String [] XCOORDS = (chaîne []) XCOORDSLIST.TOARRAY (); Mais cela montre ensuite un 08-04 11: 54: 24.462: ERROR / ANDROIDRONTIME (1173): Causé par: Java.Lang.classcastException: [ljava.lang.Object; erreur.


Désolé, j'ai édité la réponse .. Ajouter simplement une chaîne moulée à la dernière déclaration (chaîne [])


C'était mon point - même avec la version éditée, l'application s'arrête (vous devez forcer la fermeture) et le logcat affiche un java.lang.classcastException: [ljava.lang.object; par: java.lang.classcastException: [ljava.lang.Object;


Êtes-vous sûr de ne pas utiliser ngarraylist.add (json_data); ?? Vous devez utiliser ngarraylist.add (JSON_DATA.GETSTRING ("XCOORD")); Je ne pense pas que vous utilisiez mon code


Oui, bien sûr, voici mon code: ArrayList XCOORDSARRAYLIST = Nouveau ArrayList (); String [] xcoords = {}; Jsonarray Jarray = New Jsonarray (résultat); pour (int i = 0; i


Changer chaîne [] xcoords = {}; à string [] xcoords;


S'il vous plaît éditer votre question .. Cela devient gênant ici .. Mettez tout votre code là-haut et dites-moi quand vous le faites


Cela a résolu l'erreur: xcoords = xcoordsarraylist.toarray (nouvelle chaîne [XCOORDSARRAYLIST.SIZE ()]);



0
votes

La matrice de cordes en Java a une taille définie qui devrait être donnée pendant la déclaration, vous ne pouvez pas la modifier ultérieurement en ajoutant ou en supprimant des éléments et le concept pur de la matrice dynamique ne se ferme pas en Java. Lire l'article détaillé ici ...

C'est la bonne façon de déclarer une gamme de taille fixe. Strong> p>

p>

   ArrayList<String> fruits = new ArrayList<String>();
        fruits.add("Value 1");
        fruits.add("Value 2");
        fruits.add("Value 3");
        fruits.add("Value 4");
        fruits.add("Value 5");
        fruits.add("Value 6");
        fruits.add("Value 7");
// add as much values as per requirement
// you can also use loops to add multiple values


0 commentaires