com.android.volley.parseerror org.json.jsonexception类型为java.lang.String的值为yes无法转换为JSONObject

时间:2018-03-04 18:16:20

标签: java android kotlin

我想在JSONObject中放入值m(字符串)后从php文件中获取数据,并在TextView中给出结果,即mResultTextView。但是,这给了我以下错误。

  

com.android.volley.parseerror org.json.jsonexception值类型是   java.lang.String无法转换为JSONObject

var m = barcode.displayValue.toString()
val jsonobj = JSONObject()

jsonobj.put("email", m)
val url = "http://192.168.1.106/verf1.php"
val que = Volley.newRequestQueue(this@MainActivity)

val req = JsonObjectRequest(Request.Method.POST, url, jsonobj, Response.Listener {
    response -> mResultTextView.text = response.toString()
},Response.ErrorListener {
    response -> mResultTextView.text = response.toString()
})
que.add(req)

1 个答案:

答案 0 :(得分:0)

您需要在POST请求的标头中设置content-typeapplication/json。要添加自定义标头以及POST请求,您可以考虑查看this tutorial

我正在从上面的链接复制教程中的代码示例。

class ServiceVolley : ServiceInterface {
    val TAG = ServiceVolley::class.java.simpleName
    val basePath = "https://your/backend/api/"

    override fun post(path: String, params: JSONObject, completionHandler: (response: JSONObject?) -> Unit) {
        val jsonObjReq = object : JsonObjectRequest(Method.POST, basePath + path, params,
                Response.Listener<JSONObject> { response ->
                    Log.d(TAG, "/post request OK! Response: $response")
                    completionHandler(response)
                },
                Response.ErrorListener { error ->
                    VolleyLog.e(TAG, "/post request fail! Error: ${error.message}")
                    completionHandler(null)
                }) {
            @Throws(AuthFailureError::class)
            override fun getHeaders(): Map<String, String> {
                val headers = HashMap<String, String>()
                headers.put("Content-Type", "application/json")
                return headers
            }
        }

        BackendVolley.instance?.addToRequestQueue(jsonObjReq, TAG)
    }
}