Android Volley JsonObjectRequest Опубликовать праметр в Котлине - PullRequest
0 голосов
/ 25 октября 2018

Я использую Volley с Java, никаких проблем нет.положить, когда преобразовать в kotlin, я обнаружил некоторую проблему с параметром отправки с запросом, я пытаюсь использовать пользовательский класс запроса расширяется от запроса, это не решает мою проблему, также я использовал JsonObjectRequest с хэш-картой некоторую ошибку, параметр не отправить с запросом.также использовал JsonObjectRequest с JSONObject, и после этого я использовал ту же ошибку. Я использовал Post Man API, сторона с API в порядке, не имеет никаких проблем, также, когда используется StringRequest, не имеет проблем

мой первый код с JsonObjectRequest

val url = "http://10.0.2.2/machine_project/includeJSON/system_machine.php"
val ahOBJ = JSONObject()
ahOBJ.put("dd", 2)

Log.d("TAG","kotJson")
val queu = Volley.newRequestQueue(this)
val ahReq = JsonObjectRequest(Request.Method.POST, url, ahOBJ, Response.Listener { response ->
    val str = response.toString()
    Log.d("TAG","response: $str")
}, Response.ErrorListener {
    error ->
    Log.d("TAG","response: ${error.message}")
})
queu.add(ahReq)

второй код

val jr:RequestQueue = Volley.newRequestQueue(this)
            val params = HashMap<String,String>()
            params["dd"] = "2"
            Log.d("TAGTest", "Ready to go")
            val jsObj = JsonObjectRequest(Request.Method.POST,
                urlUP,
                JSONObject(params),
                Response.Listener
                {
                    response ->
                    Log.d("TAGTest", response.toString())
                },
                Response.ErrorListener {
                    error ->
                    Log.d("TAGTest", "error: ${error.message}")
                })
            jr.add(jsObj)

весь результат

{"error":true,"msg":"All filed required"}

этот результат из внутреннего интерфейса API

API

$response = array();
if($_SERVER['REQUEST_METHOD'] == 'POST'){

    if( isset($_POST['dd'])){

        require_once ('systemMachineAPI.php');

        $result = get_sm();
        if($result != NULL){
            $response['error'] = false;
            $response['msg'] = $result;
        }else{
            $response['error'] = true;
            $response['msg'] = 'We Found Some Mistake';
        }
    }else{
        $response['error'] = true;
        $response['msg'] = 'All filed required';
    }

}else{
    $response['error'] = true;
    $response['msg'] = 'Cannot connect to server';
}

если кто-то из тел может это исправить или попытаться использовать залп с праметром kotlin, пожалуйста, помогите мне

1 Ответ

0 голосов
/ 11 июля 2019

Я знаю, что это старая публикация, и я надеюсь, что вы уже нашли выход из этого, но я публикую свое решение на случай, если кто-то еще попадет сюда.

Я думаю, на стороне php, выпропустил расшифровать опубликованную строку.

Делая это на Kotlin

val ahOBJ = JSONObject ()

ahOBJ.put ("dd", 2)

вы предоставляете Volley объект в стиле json для отправки в скрипт php, поэтому на стороне php вы получите строку в стиле json для работы вместо параметров POST.

ВPHP сторона попробуйте

// getting the posted data and decoding it to a json object
$postedContent = json_decode(file_get_contents("php://input"));

// $postedContent should now contain your 'dd' property

if (property_exists($postedContent, 'dd'))
{
    // yes, we got our property 
    echo $postedContent->dd;
}
...