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

Android调用谷歌翻译API时出现String无法转换为JSONObject错误

问题根因

报错信息已经明确了故障链路:

  1. 请求谷歌翻译接口后,返回的响应不是预期的JSON格式,而是HTML文档(响应开头的<!DOCTYPE是HTML文档的标准标记),所以直接传入JSONObject构造函数会抛出类型不匹配异常
  2. 后续的空指针异常是因为JSON解析失败后localJSONObject为空,后续代码直接调用了该对象的length()方法导致崩溃

你调用的https://translate.google.com/translate_a/t是谷歌未对外公开的私有接口,本身没有稳定性承诺,之前能正常调用现在报错,核心原因有两个:

  • 你当前使用的AndroidTranslate/2.5.3是非常老旧的客户端UA,谷歌已经停止对该版本客户端的支持,直接拦截了对应请求
  • 谷歌近期调整了私有接口的校验规则,client=at等旧参数已经失效,请求被拦截后返回错误提示页或人机验证页

修复方案

  1. 先确认响应具体内容,在读取到str1后新增日志打印,定位具体拦截原因:
str1 = new BufferedReader(new InputStreamReader(localDefaultHttpClient.execute
        (new HttpPost("https://translate.google.com/translate_a/t?client=at&sc=1&v=2.0&sl="
                + Global.lan1 + "&tl=" + Global.lan2 + "&ie=UTF-8&oe=UTF-8&text="
                + URLEncoder.encode(params[0], "UTF-8"))).getEntity().getContent(), "utf-8"), 8).readLine();
// 新增以下日志输出完整响应
Log.d("TRANSLATE_RESP", str1);
  1. 长期稳定方案:废弃私有接口,改用谷歌官方公开的Cloud Translation API,走正规鉴权流程调用,不会被随意拦截。
  2. 临时兼容方案(仍有被拦截风险):
  • 更新请求的User-Agent为当前主流浏览器的UA,替换原有旧安卓翻译客户端的UA,例如:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
  • 修改请求参数中的client=at为client=gtx,适配谷歌最新的接口参数要求
  • 新增Accept: application/json请求头,明确要求接口返回JSON格式内容
  1. 代码层面增加兜底逻辑,避免崩溃:
if (str1 != null) {
    try {
        localJSONObject = new JSONObject(str1);
        // 新增非空判断后再执行业务逻辑
        if (localJSONObject != null) {
            // 原有调用length()等业务逻辑放在这里
        }
    } catch (Exception e) {
        e.printStackTrace();
        // 解析失败的兜底逻辑,比如提示用户翻译失败
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:54:04