В моем приложении для Android я пытаюсь установить связь с веб-сервером, в котором хранятся случайно созданные псевдоним и имена пользователей.
{ scores: [ { un: "Feltricapulta", sc: "143" }, { un: "Henroid", sc: "120" }, { un: "ieteubmospta", sc: "70" }, { un: "pmbotesteuai", sc: "67" }, { un: "epesomiubtat", sc: "65" } ] }
Код в файле PHP выглядит следующим образом:
<?php include ('connecttomysql.php'); $command = 'SELECT un, sc FROM xmlscores ORDER BY sc DESC'; $execute_command = mysql_query($command); echo '{ "scores": '; while ($table_row = mysql_fetch_assoc($execute_command)) { $jsonArray [] = $table_row; } echo json_encode($jsonArray); echo '}' ?>
Я назвал этот URL-адрес .php
на Android, используя общий метод HttpGet
. Выходные данные json печатаются в стеке и предоставляют мне ошибку «Невозможно преобразовать из объекта в массив».
Глядя на файл PHP и вывод json, есть ли что-то заметно с моими кодами или выходом? Я не могу понять.
«Невозможно преобразовать объект из массива»
означает, что вы пытаетесь преобразовать строку ответа в JSONArray
. но Current String Содержит JSONObject
как корневой элемент вместо JSONArray
. поэтому преобразуйте его в JSONObject
как:
JSONObject json=new JSONObject(<Server response string here>); // get scores JSONArray from json JSONArray jsonscoresarray=json.getJSONArray("scores"); ...
// Реализация массива Json должна идти так.
@Override public void fromJSON(Object json) throws JSONException { JSONObject jsonObject = new JSONObject((String) json); JSONArray jsonArray = jsonObject.getJSONArray("scores"); mScores = new ArrayList<Score>(); for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObjct = (JSONObject)jsonArray.getJSONObject(i); Score object = new Score(); object.fromJSON(jsonObjct); mScores.add(object); } }