Android Studio JSON解析报错:无法将<!doctype字符串转为JSONObject
问题原因及排查方案
先核对请求URL是否完全正确
你在Android代码里写的请求地址,和你用在线JSON工具测试的地址必须完全一致,包括域名、路径、后缀(比如.php)、参数。如果地址写错,服务器可能返回404错误页面(就是带<!doctype>的HTML内容),自然没法转成JSONObject。检查PHP脚本是否输出了多余内容
就算在线测试正常,也得排查PHP代码的问题:- 有没有在
json_encode输出前后加了调试用的echo、空格、换行,或者PHP标签<?php/?>外有空白字符?这些都会让返回内容混进非JSON的字符。 - 有没有触发PHP错误?比如SQL语句报错、变量未定义,服务器会输出错误提示的HTML页面。你可以临时把Android里的
JsonObjectRequest换成StringRequest,打印返回的字符串看看真实内容:StringRequest stringRequest = new StringRequest(Request.Method.GET, YOUR_REQUEST_URL, response -> Log.d("RawResponse", response), error -> Log.e("RequestError", error.getMessage())); requestQueue.add(stringRequest);
- 有没有在
确保PHP设置了正确的响应头
PHP输出JSON时,必须指定响应类型,不然服务器默认返回HTML类型,Volley解析时容易出问题。在echo json_encode(...)之前加上:header('Content-Type: application/json; charset=utf-8');排查服务器是否拦截了非浏览器请求
有些服务器会对非浏览器的请求做拦截,返回验证页面(比如验证码、登录提示),这时候拿到的就是HTML。你可以用Postman模拟Android的请求头(比如把User-Agent设成Mozilla/5.0 (Linux; Android 10; SM-G973F) AppleWebKit/537.36),看看返回的是不是纯JSON。
内容的提问来源于stack exchange,提问作者Pierre-Paul Arthau
相关产品推荐
相关产品推荐

