Android Kotlin中的Volley JsonObjectRequest Post参数

时间:2018-10-25 10:06:08

标签: android kotlin android-volley

我在Java上使用Volley并没有任何问题。 转换成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 Post prameter一起使用排球,请帮助我

1 个答案:

答案 0 :(得分:0)

我知道那是一个旧帖子,希望您已经找到了解决的办法,但是我正在发布我的解决方案,以防其他人到达这里。

我认为,在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;
}