【问题标题】:Android, JSONObject cannot be converted to JSONArrayAndroid,JSONObject 无法转换为 JSONArray
【发布时间】:2013-05-07 08:42:12
【问题描述】:

在我的 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 '}'

    ?>

我使用通用的HttpGet 方法在Android 中调用了这个.php URL。 json 数据的输出打印到堆栈跟踪,并为我提供“无法从对象转换为数组”错误。

查看 PHP 文件和 json 输出,我的代码或输出有什么明显错误吗?我想不通。

【问题讨论】:

  • 你的安卓代码是什么?你可能有一个 .getJSONArray() 你需要一个 .getJSONObject()。

标签: php android mysql json


【解决方案1】:

“无法从对象转换为数组”

表示您正在尝试将响应字符串转换为JSONArray。但当前字符串包含 JSONObject 作为根元素,而不是 JSONArray。所以将其转换为JSONObject

JSONObject json=new JSONObject(<Server response string here>);

//  get scores JSONArray from json
JSONArray jsonscoresarray=json.getJSONArray("scores");
...

【讨论】:

  • 这正是我将实体响应字符串传递到新 jsonArray 的问题 xD。非常感谢。
【解决方案2】:

// 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);
            }
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 2016-01-12
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多