RESTful API с Volley Kotlin не работает - PullRequest
0 голосов
/ 19 апреля 2020

Я видел много других вопросов и ответов в Интернете, но я не нашел решения своей проблемы. По сути, я создал страницу API. Если я использую тестер API (например, apitester.com), он работает правильно. Вместо этого, когда я делаю POST-запрос от 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)

1 Ответ

0 голосов
/ 19 апреля 2020

сделать это:

$username =  $_POST['username']

вместо:

 $data = json_decode(file_get_contents('php://input'), true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...