在我的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 '}'
?>
我使用通用.php
方法在Android中调用了此HttpGet
网址。 json数据的输出打印到堆栈跟踪,并为我提供“无法从对象转换为数组”错误。
查看PHP文件和json输出,我的代码或输出有什么明显错误吗?我无法理解。
答案 0 :(得分:3)
“无法从对象转换为数组”
表示您正在尝试将响应字符串转换为JSONArray
。但是当前字符串包含JSONObject
作为根元素而不是JSONArray
。所以将其转换为JSONObject
as:
JSONObject json=new JSONObject(<Server response string here>);
// get scores JSONArray from json
JSONArray jsonscoresarray=json.getJSONArray("scores");
...
答案 1 :(得分:0)
// 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);
}
}