无明显原因的 StringRequest 响应为空

StringRequest response empty for no apparent reason

我原来的 PHP 网络服务 public void onResponse(String response) response 包含以下响应:

{"success":1,"message":"Spot Successfully Added!"}

在我更新的 PHP 网络服务中,response 是空的,不存在的。

当 运行 在我的浏览器中使用 PHP 网络服务时,我得到以下 JSON 对象:

{"success":1,"message":"Spot Successfully Added!","like_id":"428"}

这很好,但我希望 response 在应用程序中看起来一样。

所以:是什么原因,如何让JSON对象出现在response中?

Java代码

public void writeLikedPos(LatLng location) {
        double latitude;
        double longitude;
        try {
            latitude = location.latitude; //nullpointer
            longitude = location.longitude;
        } catch (NullPointerException e) {
            System.out.println("Noe gikk galt!");
            e.printStackTrace();
            return;
        }
        final String latitudeStr = String.valueOf(latitude);
        final String longitudeStr = String.valueOf(longitude);

        StringRequest postRequest = new StringRequest(Request.Method.POST, url,
                new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                System.out.println("String response: " +response);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                System.out.println("Error");
            }
        }) {
            @Override
            protected Map<String, String> getParams() {
                Map<String, String> params = new HashMap<String, String>();
                params.put("latitude", latitudeStr);
                params.put("longitude", longitudeStr);

                return params;
            }
        };
        VolleySingleton.getInstance().addToReqQueue(postRequest);
    }
}

新网络服务 PHP(结果未显示在 response 中)

<?php
//load and connect to MySQL database stuff
require("config.inc.php");

if (!empty($_POST)) {


    //initial query
    if(isset($_POST['user_id']) && !empty($_POST['user_id'])) {
        $query = "INSERT INTO spot ( latitude, longitude, user_id ) VALUES ( :lat, :long, :uid ) ";
        //Update query
        $query_params = array(
            ':lat' => $_POST['latitude'],
            ':long' => $_POST['longitude'],
            ':uid' => $_POST['user_id']
            );

    } else {
        $query = "INSERT INTO spot ( latitude, longitude ) VALUES ( :lat, :long ) ";
        //Update query
        $query_params = array(
            ':lat' => $_POST['latitude'],
            ':long' => $_POST['longitude']
            );
    }
    //execute query
    try {
        $stmt   = $db->prepare($query);
        $result = $stmt->execute($query_params);
    }
    catch (PDOException $ex) {
        // For testing, you could use a die and message. 
        //die("Failed to run query: " . $ex->getMessage());

        //or just use this use this one:
        $response["success"] = 0;
        $response["message"] = "Database Error. Couldn't add lat/long-pair!";
        die(json_encode($response));
    }


    $latt = $_POST['latitude'];
    $longg = $_POST['longitude'];

    $getId = "SELECT id FROM spot WHERE latitude=$latt AND longitude=$longg LIMIT 1";
    //execute query
    try {
        $stmt2   = $db->prepare($getId);
        $result2 = $stmt2->execute($query_params);
    }
    catch (PDOException $ex) {
        // For testing, you could use a die and message. 
        //die("Failed to run query: " . $ex->getMessage());

        //or just use this use this one:
        $response["success"] = 0;
        $response["message"] = "Database Error. Couldn't retrieve like_id!";
        die(json_encode($response));
    }

    $row = $stmt2->fetchAll();
    if($row) {

    $response["success"] = 1;
    $response["message"] = "Spot Successfully Added!";
    $response["like_id"] = $row[0]['id'];
    echo json_encode($response);
    }

} else {
    ?>
    <h1>Registrer GPS-koordinater</h1>
    <form action="idtest.php" method="post">
        Latitude:<br />
        <input type="text" name="latitude" value="" />
        <br /><br />
        Longitude:<br />
        <input type="text" name="longitude" value="" />
        <br /><br />
        Google ID:<br />
        <input type="text" name="user_id" value="" />
        <br /><br />
        <input type="submit" value="Opprett kolonne i 'spot'" />
    </form>
    <?php
}

?>

原始网络服务PHP:

<?php
// TODO: Lag en sjekk for at lat/long faktisk er lat/long-verdier.

//load and connect to MySQL database stuff
require("config.inc.php");

if (!empty($_POST)) {
    //initial query
    if(isset($_POST['user_id']) && !empty($_POST['user_id'])) {
        $query = "INSERT INTO spot ( latitude, longitude, user_id ) VALUES ( :lat, :long, :uid ) ";
        //Update query
        $query_params = array(
            ':lat' => $_POST['latitude'],
            ':long' => $_POST['longitude'],
            ':uid' => $_POST['user_id']
            );

    } else {
        $query = "INSERT INTO spot ( latitude, longitude ) VALUES ( :lat, :long ) ";
        //Update query
        $query_params = array(
            ':lat' => $_POST['latitude'],
            ':long' => $_POST['longitude']
            );
    }
    //execute query
    try {
        $stmt   = $db->prepare($query);
        $result = $stmt->execute($query_params);
    }
    catch (PDOException $ex) {
        // For testing, you could use a die and message. 
        //die("Failed to run query: " . $ex->getMessage());

        //or just use this use this one:
        $response["success"] = 0;
        $response["message"] = "Database Error. Couldn't add lat/long-pair!";
        die(json_encode($response));
    }

    $response["success"] = 1;
    $response["message"] = "Spot Successfully Added!";
    echo json_encode($response);

} else {
    ?>
    <h1>Registrer GPS-koordinater</h1>
    <form action="addspottest.php" method="post">
        Latitude:<br />
        <input type="text" name="latitude" value="" />
        <br /><br />
        Longitude:<br />
        <input type="text" name="longitude" value="" />
        <br /><br />
        Google ID:<br />
        <input type="text" name="user_id" value="" />
        <br /><br />
        <input type="submit" value="Opprett kolonne i 'spot'" />
    </form>
    <?php
}

?>

我很困惑为什么脚本在网络浏览器中显示了正确的 JSON 对象,但在 Volley onResponse 中什么也没有。

实现 New web service PHP 中所做的事情的更好方法是只执行一个查询,即 Original web service PHP 中的查询,然后使用

mysqli_insert_id() PDO::lastInsertId()

取决于您用于 MySql 连接的方法。