将字符串m放入JSONObject后从PHP取数显示遇Volley解析错误
解决Volley ParseError: String无法转为JSONObject的问题
这个错误的核心原因其实很直白:你的PHP接口返回的是纯字符串"yes",但你在Android端用了JsonObjectRequest(或者默认期望解析成JSONObject),Volley会尝试把返回内容直接转成JSON对象,而纯字符串根本不符合JSON对象的格式,自然就抛出这个异常了。
给你两种实用的解决思路,按需选择:
思路1:修改PHP端,返回标准JSON格式
这是最规范的做法,把返回的字符串包装成合法的JSON对象,比如:
// PHP代码示例 $response = ["status" => "yes"]; echo json_encode($response);
这样返回的内容就是{"status":"yes"},完全符合JSON对象格式,Android端用JsonObjectRequest就能正常解析,后续只需通过getString("status")就能拿到"yes",再设置到mResultTextView里就行。
思路2:修改Android端,用StringRequest接收数据
如果不想改动PHP代码,那就在Android端换用StringRequest来接收纯字符串,跳过JSON解析逻辑:
// 替换原有的JsonObjectRequest为StringRequest StringRequest stringRequest = new StringRequest(Request.Method.POST, 你的接口URL, new Response.Listener<String>() { @Override public void onResponse(String response) { // 直接拿到返回的"yes"字符串,设置到TextView mResultTextView.setText(response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { mResultTextView.setText("请求出错:" + error.getMessage()); } }) { @Override protected Map<String, String> getParams() throws AuthFailureError { // 这里依然把字符串m放入请求参数 Map<String, String> params = new HashMap<>(); params.put("你的参数键名", m); // 替换成实际的参数键 return params; } }; // 将请求加入Volley队列 RequestQueue queue = Volley.newRequestQueue(this); queue.add(stringRequest);
额外提醒:如果坚持用JsonObjectRequest,一定要确保PHP返回的内容没有多余空格、HTML注释或其他非JSON内容,这些都会导致解析失败。
内容的提问来源于stack exchange,提问作者siddharth
相关产品推荐
相关产品推荐

