Android:执行任务时字符串无法转换JSON对象错误

Posted

技术标签:

【中文标题】Android:执行任务时字符串无法转换JSON对象错误【英文标题】:Android : String can not be converted JSON object error while executing task 【发布时间】:2021-11-17 11:02:28 【问题描述】:

尝试执行以下代码,google的翻译API

            DefaultHttpClient localDefaultHttpClient = new DefaultHttpClient();
            HttpParams localHttpParams = localDefaultHttpClient.getParams();
            localHttpParams.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, Integer.valueOf(10000));
            localHttpParams.setParameter(CoreConnectionPNames.SO_TIMEOUT, Integer.valueOf(10000));
            localHttpParams.setParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET, "utf-8");
            HttpProtocolParams.setUserAgent(localHttpParams, "androidTranslate/2.5.3 2.5.3 (gzip)");
            try 
                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();

             catch (IOException e) 
                e.printStackTrace();
            
            if (str1 != null) 
                try 
                    localJSONObject = new JSONObject(str1);
                 catch (Exception e) 
                    e.printStackTrace();
                
            

在此代码运行正常之前,但几天我收到以下错误

    W/System.err: org.json.JSONException: Value <!DOCTYPE of type java.lang.String cannot be converted to JSONObject
 W/System.err:     at org.json.JSON.typeMismatch(JSON.java:112)
 W/System.err:     at org.json.JSONObject.<init>(JSONObject.java:169)
 W/System.err:     at org.json.JSONObject.<init>(JSONObject.java:182)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int org.json.JSONObject.length()' on a null object reference

是的,我已经在 google 和 SO 上搜索了相关答案并得到了一些解决方案并尝试了我的代码,但我仍然收到此错误,可能是我在某个地方弄错了,但我不知道具体在哪里。 任何人都可以指导我确切的错误在哪里

【问题讨论】:

【参考方案1】:

!DOCTYPE 通常与 html 而非 JSON 相关联。您确定您调用的 API 返回的是 JSON 而不是 HTML 页面本身。查看该谷歌翻译 URL,您似乎正在获取 HTML 页面并尝试将 HTML 页面解析为 JSON,因此它失败了。

我会调试str1 并查看str1 的输出到底是什么。

【讨论】:

那么,将该页面转换为 JSON 对象的解决方案是什么,无论如何 您使用的是 Google Translate API 并且许可已过期?因此,它不是从 API 向您发送回 JSON,而是在一些 HTML 页面中发送。我会检查str1 的内容并将其发布在这里。你说它以前可以工作,现在它不再工作了? 是的,没错,它以前可以工作,但现在不行,正如你所说,我已经调试了我的代码,结果在 str1 中得到了

以上是关于Android:执行任务时字符串无法转换JSON对象错误的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Android 中将 java 字符串转换为 JSON 数组

Json Deseralizer 无法将字符串转换为 guid

Android JSON解析字符串无法转换为jsonobject

无法访问将 xml 转换为 json

当 minifyEnabled 为 true 时,如何将 JSON 字符串转换为自定义对象?

Android:'threadid = 3:执行长任务时对信号3做出反应