Php RESTful API与截击Kotlin doens';行不通

Php RESTful API与截击Kotlin doens';行不通,php,android,api,kotlin,post,Php,Android,Api,Kotlin,Post,我在网上看到了许多其他的问题和答案,但我还没有找到解决我问题的办法。 基本上,我已经创建了一个API页面。如果我使用API测试仪(比如apitester.com),它可以正常工作。 相反,当我从Volley(Android Kotlin)发布请求时,它不起作用。 看起来参数是空的。 我不明白这个问题 PHP代码: include_once($_SERVER['DOCUMENT_ROOT'] . "/include/variables.php"); global $localhost_db, $u

我在网上看到了许多其他的问题和答案,但我还没有找到解决我问题的办法。 基本上,我已经创建了一个API页面。如果我使用API测试仪(比如apitester.com),它可以正常工作。 相反,当我从Volley(Android Kotlin)发布请求时,它不起作用。 看起来参数是空的。 我不明白这个问题

PHP代码:

include_once($_SERVER['DOCUMENT_ROOT'] . "/include/variables.php");
global $localhost_db, $username_db, $password_db, $database_api;
header("Content-Type:application/json");
if ($c = new mysqli($localhost_db, $username_db, $password_db, $database_api)) {
    $c->set_charset("utf8");
    //POST request -> insert a new data to database
    $data = json_decode(file_get_contents('php://input'), true);
    $condition = isset($data["logged"]) && ($data["logged"] == 0 || $data["logged"] == 1) && isset($data["username"]) && isset($data["language"]);
    if ($condition) {
        $year = date('Y');
        $month = date("m");
        $day = date("d");
        $sql = "SELECT `date` FROM statistics WHERE `username`='" . $data["username"] . "' AND YEAR(`date`)=" . $year . " AND MONTH(`date`)=" . $month . " AND DAY(`date`)=" . $day;
        if ($r = $c->query($sql)) {
            if ($r->num_rows == 0) {
                $sql = "INSERT INTO statistics(`id`, `date`, `logged`, `username`, `language`) VALUES(NULL,'" . date("Y-m-d H:i:s") . "', '" . $data["logged"] . "', '" . $data["username"] . "', '" . $data["language"] . "')";
                if ($r = $c->query($sql)) {
                    response(200, "OK", "Record inserted correctly");
                } else {
                    response(500, "Error", "Can't insert record on database");
                }
            } else {
                response(400, "Error", "Record has already inserted today");
            }
        } else {
            response(400, "Error", "Something was wrong in POST request (1)");
        }
    } else {
        response(400, "Error", "Something was wrong in POST request (2). Received data> logged: " . $data["logged"] . ", language: " . $data["language"] . ", username: " . $data["username"]);
    }
} else {
    echo "Failed to connect to the database.";
    response(500, "Error", "Can't connect to the database");
}

function response($response_code, $response_status, $response_description)
{
    $response['code'] = $response_code;
    $response['status'] = $response_status;
    $response['description'] = $response_description;

    $json_response = json_encode($response);
    echo $json_response;
}
?>
取而代之的是Android Kotlin代码:

var params = JSONObject()
params.put("username", username)
    params.put("logged", logged)
    params.put("language", language)

    val que = Volley.newRequestQueue(this)
    val req = object : JsonObjectRequest(Request.Method.POST, url_statistics, params,
        Response.Listener {
            val jsonResult = it.toString()
            var jsonResultArray = arrayOf(jsonResult, "")
            println(jsonResult)
            val jsonObj = JSONObject(
                jsonResultArray[0].substring(
                    jsonResultArray[0].indexOf("{"),
                    jsonResultArray[0].lastIndexOf("}") + 1
                )
            )
            if (jsonObj.getString("code")
                    .toInt() == 200
            ) {//Successful}
            else {//Error}
        }, Response.ErrorListener {
            //Error
        }
    ){}
    que.add(req)
这样做:

$username =  $_POST['username']
而不是:

 $data = json_decode(file_get_contents('php://input'), true);

这绝对不行,因为Volley发送了一个Json。我使用了改型而不是Volley,它很容易使用,效率更高。我还用PHP开发了服务器端,它绝对有效。我认为你的客户代码是正确的。