Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So übergeben Sie eine ArrayList an eine andere Aktivität und konvertieren sie in Double

Die Daten, die Sie aus MySQL abrufen ist nicht im richtigen JSON Format und kann nicht in ein Array von Doubles konvertiert werden. Ein JSONArray ist eine Sammlung von JSONObject s. Im Moment erhalten Sie scheinbar ein einzelnes Array formatiert wie [9.32, 5.22, 10.201 ... ]

Was Sie haben sollten, ist ein JSONArray die JSONObjects enthält

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

Sie könnten dann die JSONObjects extrahieren aus dem JSONArray und einfach direkt auf die Zahlenwerte zugreifen

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

Sie können dies einfach in eine Schleife umwandeln, um ein ganzes JSONArray zu durchlaufen von Werten

Update – PHP-Probleme

Ihre Zeichenfolge kommt nicht im richtigen JSON zurück formatieren, da Sie das gesamte Ergebnis Ihrer Abfrage in ein einzelnes Array ausgeben. Probieren Sie so etwas aus:

$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);

Ich würde das zuerst testen, aber die Idee ist, dass Sie das erstellen müssen, was das JSONArray sein wird und fügen Sie dann kleinere innere Arrays hinzu, die zum JSONObject werden . Wenn Sie das json_encoden, haben Sie ein Array [] mit Objekten {double:some_number}. Zum Extrahieren müssen Sie lediglich das JSONArray durchlaufen und erhalten Sie jedes Double, das mit dem Schlüsselwert Double verknüpft ist. Es würde ungefähr so ​​funktionieren:

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
}