簡體   English   中英

使用 PHP 將 JSON 數組從數據庫返回到 android

[英]Return JSON array from database with PHP to android

我正在嘗試將一組結果從 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;
    }
}

我將我的數據從 android 發布到的 index.php 部分:

    //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

我最近使用了類似於下面的例程。 無論只有一個結果還是多個結果,它始終有效。

$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() .'}}'; 
}

您應該將resultsString轉儲到 debug Log以查看它的外觀以及它是否是預期的 JSON 字符串。 然后您可以看到在服務器或客戶端中必須修復代碼的位置。

我還會研究JSONObject.getJSONArray() ,因為您發回的響應由嵌套數組 AFAICS 組成。

我相信你應該使用

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);運行此方法的結果new JSONObject(res); 在 Java 方面,無需做任何額外的翻譯......我是憑記憶說的,所以,它可能不是 100% 正確,但如果不是,它非常接近。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM