我想在JSONObject
中放入值m(String)后从php文件中获取数据,并在TextView
中给出结果,即mResultTextView
。但是,这给了我以下错误。
com.android.volley.parseerror org.json.jsonexception类型为java.lang.String的值为yes无法转换为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)
您需要在POST请求的标头中将content-type
设置为application/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)
}
}