You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Reviewmeta API获取JSON数据时遇JSONException错误求助

解决JSON解析时"End of input at character 0"的问题

这个错误本质很明确——你尝试解析的内容是空字符串(长度为0),根本不是预期的JSON数据。这说明你的AsyncTask在请求Reviewmeta API时,要么没成功获取到响应,要么拿到的响应是空的,就急着去解析了。我给你梳理几个排查和解决的方向:

1. 确保网络请求真的拿到了有效响应

在你的doInBackground方法里,一定要先检查HTTP响应码,并且正确读取响应流。很多问题出在没判断响应是否成功,或者读取流时出现异常。可以参考这段修改后的代码:

@Override
protected String doInBackground(Void... voids) {
    String responseContent = "";
    try {
        URL apiUrl = new URL("你的Reviewmeta API请求地址");
        HttpURLConnection connection = (HttpURLConnection) apiUrl.openConnection();
        connection.setRequestMethod("GET");
        
        // 先校验响应码是否为成功状态(200)
        int responseCode = connection.getResponseCode();
        if (responseCode != HttpURLConnection.HTTP_OK) {
            Log.e("NETWORK_ERR", "请求失败,响应码:" + responseCode);
            return null;
        }
        
        // 正确读取响应流
        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        String line;
        while ((line = reader.readLine()) != null) {
            responseContent += line;
        }
        reader.close();
        connection.disconnect();
    } catch (IOException e) {
        Log.e("NETWORK_EXCEPTION", "网络请求出错:" + e.getMessage());
        return null;
    }
    return responseContent;
}

2. 解析前先校验响应内容是否为空

在onPostExecute里,绝对不要上来就解析,先判断返回的内容是不是null或者空字符串:

@Override
protected void onPostExecute(String response) {
    super.onPostExecute(response);
    
    // 先做非空校验
    if (response == null || response.trim().isEmpty()) {
        Log.e("JSON_ERR", "拿到的响应是空的,无法解析");
        return;
    }
    
    try {
        JSONObject jsonObj = new JSONObject(response);
        String count = jsonObj.getString("count");
        Log.d("SUCCESS", "提取到count值:" + count);
        // 这里处理你的业务逻辑
    } catch (JSONException e) {
        Log.e("JSON_EXCEPTION", "解析出错:" + e.getMessage());
    }
}

3. 检查基础配置是否到位

  • 网络权限:确保你的AndroidManifest.xml里添加了网络权限:
    <uses-permission android:name="android.permission.INTERNET" />
    
  • 明文网络适配:如果你的API是HTTP协议,且应用目标SDK为29及以上,需要在application标签中添加:
    android:usesCleartextTraffic="true"
    
    更推荐改用HTTPS协议的API地址,更安全规范。

4. 验证API地址是否正确

你可以先用浏览器或者Postman直接访问你的API地址,确认是否能得到你预期的JSON响应。如果浏览器里都拿不到正确数据,那问题就出在API请求地址或参数上,和解析逻辑无关。

按照这几步排查,应该就能解决空内容导致的解析错误了。

内容的提问来源于stack exchange,提问作者MrMinemeet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:33:07