0

我正在尝试将一组结果从 PHP 返回到 android。

我已经能够返回一个结果,但现在我试图返回多个结果,我在弄清楚如何将其作为数组执行时遇到了一些麻烦。

PHP函数:

   public function searchForPeople($tower) {
    $uuid = uniqid('', true);

    $result = mysql_query("SELECT * FROM users WHERE tower='$tower'") or die(mysql_error());
    $resultNo = mysql_num_rows($result);

    // check for successful store
    if ($result != null) {

        //if just one result return it
        if ($resultNo == 1) {

            // return result
            $resultSet[] = mysql_fetch_array($result);
            return $resultSet;

    //if more than one loop through
    } else {

        //add each row to an array
        while($row = mysql_fetch_array($result)) {
            $resultSet[] = $row;
        }
        return $resultSet;
        }

    } else {
        return false;
    }
}

index.php 的部分,我将我的数据从 android 发布到:

    //SEARCH FOR PEOPLE
     else if ($tag == 'searchPeople') {

        $tower = $_POST['tower'];

        $result = $db->searchForPeople($tower);


    // check array has been created
    if ($result != false) {

        $response["success"] = 1;

        $count = 0;
        foreach($result as $row) {

        $response[$count]["user"]["name"] = $row["name"];
        $response[$count]["user"]["email"] = $row["email"];

        $count++;
        }

        echo json_encode($response);


      } else {
        $response["error"] = 2;
        $response["error_msg"] = "No users found";
        echo json_encode($response);
    }
    }

        else {
    echo "Invalid Request";
}

然后,我试图在 android 中获取信息,如下所示,但是收到没有 0 值的错误,这意味着我在 PHP 中返回 json 的方式一定有问题。

JSONObject results  = new JSONObject(resultsString);
JSONObject json_row = results.getJSONObject("0");
JSONObject json_user = json_row.getJSONObject("user");

我确定这是返回 SQL 结果的 PHP 数组的问题。可能当我循环它们以将它们添加到 $resultSet 或 $response 时。

非常感谢任何帮助。

编辑:

以下是我得到的错误:

11-14 19:42:37.270: E/JSON(639): "[{\"uid\":\"4\",\"unique_id\":\"505efc638e0f48.78430999\",\"name\":\"fish\",\"email\":\"fish\",\"encrypted_password\":\"r\/Hb7uXrHN8bFuRoKlG8+Y5LdKFjM2QyZDUyYzQ1\",\"salt\":\"c3d2d52c45\",\"created_at\":\"2012-09-23 13:11:15\",\"updated_at\":\"2012-11-03 09:56:15\",\"location\":\"888\",\"tower\":\"IS\",\"base_location\":\"\",\"client_site\":\"\",\"graduate\":\"0\",\"location_updated\":\"0000-00-00 00:00:00\"}]"
11-14 19:42:37.270: E/JSON Parser(639): Error parsing data org.json.JSONException: Value [{"uid":"4","unique_id":"505efc638e0f48.78430999","name":"fish","email":"fish","encrypted_password":"r/Hb7uXrHN8bFuRoKlG8+Y5LdKFjM2QyZDUyYzQ1","salt":"c3d2d52c45","created_at":"2012-09-23 13:11:15","updated_at":"2012-11-03 09:56:15","location":"888","tower":"IS","base_location":"","client_site":"","graduate":"0","location_updated":"0000-00-00 00:00:00"}] of type java.lang.String cannot be converted to JSONArray
4

3 回答 3

0

您应该将您的转储resultsString到调试Log以查看它的外观以及它是否是预期的 JSON 字符串。然后你可以看到,在服务器或客户端中,你必须修复代码。

我还会查看JSONObject.getJSONArray(),因为您发回的响应由嵌套数组 AFAICS 组成。

于 2012-11-11T16:01:10.397 回答
0

我最近使用了类似于下面的例程。无论只有一个结果还是多个结果,它总是有效的。

$dbuser = // user name;
$dbpass = // password;
$dbhost = // host name;
$dbname = // database name;

$sql = "SELECT * FROM users WHERE tower=" . $tower;

try {
$dbh = new PDO("mysql:host=$dbhost;dbname=$dbname;charset=utf8", $dbuser, $dbpass); 
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $dbh->query($sql);  
$results = $stmt->fetchAll(PDO::FETCH_OBJ);
$dbh = null;
echo '({"items":'. json_encode($results) .'});';
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}'; 
}
于 2012-11-11T00:32:02.837 回答
0

我相信你应该使用

mysql_fetch_assoc

在 PHP 中提取行。然后你的结果就可以被 json_encoded 转换成你需要返回给 Android 的字符串了。

所以试试这个:

function sqlToJSON($sql){
     $sth = mysql_query($sql);

    //if this is an update or an insert nothing to return
    if($sth === false || $sth === true){    

        return null;
    }    

    $rows = array();
    while($r = mysql_fetch_assoc($sth)) {
        $rows[] = $r;
    }   
    return json_encode($rows);
 }

您应该能够new JSONObject(res);在 Java 端运行此方法的结果,而无需进行任何额外的翻译......我是从记忆中说的,所以,它可能不是 100% 正确,但如果不是,它很漂亮关。

于 2012-11-11T16:16:10.573 回答