使用PHP将JSON数组发送到Android Volley

时间:2015-05-10 13:16:16

标签: php android mysql json android-volley

我从MySQL查询发送数据数组,我使用json_encode来做到这一点:

pixel_end

在Android LogCat中,当我创建JSON对象时,我看到了:

public function getFriends($id){
$query = mysql_query(" SELECT uid, name, email
                        FROM users
                        RIGHT JOIN friendships 
                        ON friendid2 = uid")        or die (mysql_error());

$jsonData = '{"tag":"friends",error":"false",';
$jsonData .= '"friends":[';

while($row = mysql_fetch_array($query)){
    $i++;
    $id = $row["uid"];
    $name = $row["name"];
    $email = $row["email"];
    $jsonData .= '{"id":"'.$id.'","name":"'.$name.'","email":"'.$email.'"},';
}

$jsonData = chop($jsonData, ",");
$jsonData .= ']}';
echo json_encode($jsonData);

谁能告诉我我做错了什么? Becouse我搜索了一些toutorials,我认为我的json语法是正确的。

我从服务器接收消息的方式:

 org.json.JSONException: Value {"tag":"friends",error":"false","friends":[{"id":"4","name":"GrubyJohny2","email":"grubyjohnny@gmail.com"},{"id":"243000000","name":"Wariacik","email":"karoltomczyk92@wp.com"}]} of type java.lang.String cannot be converted to JSONObject

1 个答案:

答案 0 :(得分:0)

"friends",error":"false"

error密钥需要双方引用。

您可以在许多免费服务中复制/粘贴JSON,例如jsonlint.org将为您解析字符串并告诉您错误的位置和位置。

正如@Noman在评论中指出的那样,您也可以将整个数据构建为PHP数组(而不仅仅是部分数据),然后简单地json_encode所有数据端:

$jsonData = array(
    'tag' => 'friends',
    'error' => 'false',
    'friends' => array(),
);

while($row = mysql_fetch_array($query)) {
    $jsonData['friends'][] = array(
        'id'    => $row['uid'],
        'name'  => $row['name'],
        'email' => $row['email'],
    );
}

echo json_encode($jsonData);

此外,应该注意mysql_query以及所有mysql_*函数现在已被弃用。您不应该编写使用这些函数的新代码。相反,您应该学会使用PDOmysqli扩展名与数据库进行通信。