Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment passer une ArrayList à une autre activité et la convertir en double

Les données que vous extrayez de MySQL n'est pas dans le bon JSON format et ne peut pas être converti en un tableau de doubles. Un JSONArray est une collection de JSONObject s. En ce moment, vous obtenez ce qui semble être un seul Array formaté comme [9.32, 5.22, 10.201 ... ]

Ce que vous devriez avoir est un JSONArray qui contient JSONObjects

points:[{1:9.32},{2:5.22}]

Vous pouvez ensuite extraire les JSONObjects à partir du JSONArray et accédez simplement aux valeurs numériques directement

JSONArray points = new JSONArray(pointsString);
JSONObject firstPoint = points.getJSONObject(1);
double value = firstPoint.getDouble("1");

vous pouvez facilement le convertir en boucle pour l'exécuter sur un JSONArray entier de valeurs

Mise à jour - Problèmes PHP

Votre chaîne ne revient pas dans le bon JSON format parce que vous videz le résultat entier si votre requête dans un seul tableau. Essayez quelque chose comme ceci :

$outerObject = array();
$result = $query->fetchAll(PDO::FETCH_ASSOC);
$numResult = count($result);
for($i = 0; $i < $numResult; $i++){
     $indexDouble = result[$i];
     $innerObject = array();
     $innerObject['double'] = $indexDouble;
     $outerObject[] = $innerObject;
}
$json = array();
$json['metoxes'] = $outerObject;
echo json_encode($json);

Je testerais cela d'abord, mais l'idée est que vous devez créer ce qui sera le JSONArray puis ajoutez-y des tableaux internes plus petits qui deviendront le JSONObject . Lorsque vous json_encode, vous aurez un tableau [] avec des objets {double:some_number}. Pour extraire, tout ce que vous avez à faire est de parcourir le JSONArray et obtenez chaque double associé à la valeur de clé double. Cela fonctionnerait comme ceci :

JSONArray fullArray = JSONArray(stringInput);
int length = fullArray.length;
for(int i = 0; i < length; i++){

    double target = fullArray.getJSONObject(i).getDouble("double");
    //do something with the double
}