Android : Строка не может быть преобразована в объект JSON ошибка при выполнении задачи

#android #json #httprequest

Вопрос:

Попытка выполнить следующий код, API перевода google

             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=atamp;sc=1amp;v=2.0amp;sl="
                                  Global.lan1   "amp;tl="   Global.lan2   "amp;ie=UTF-8amp;oe=UTF-8amp;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 и ТАК далее соответствующий ответ, нашел некоторые решения и попробовал использовать свой код, но все равно получаю эту ошибку, может быть, я где-то ошибся, но я не знаю, где именно.
Может ли кто-нибудь указать мне, где именно произошла ошибка

Ответ №1:

!DOCTYPE обычно ассоциируется с HTML, а не с JSON. Вы уверены, что вызываемый вами API возвращает JSON, а не саму HTML-страницу. Глядя на этот URL-адрес Google translate, кажется, что вы получаете HTML-страницу и пытаетесь проанализировать HTML-страницу как JSON, следовательно, это не удается.

Я бы отладил str1 и посмотрел, что str1 на самом деле получается.

Комментарии:

1. Итак, какое решение для преобразования этой страницы в объект JSON существует в любом случае

2. Может быть, вы использовали API Google Translate, и срок действия этой лицензии истек? Поэтому вместо того, чтобы отправлять вам обратно JSON из API, он отправляет какую-то HTML-страницу. Я бы проверил содержание str1 и разместил его здесь. Вы сказали, что это работало раньше, а теперь это больше не работает, верно?

3. Да, точно, это работало раньше, но не сейчас, как вы говорите, я отладил свой код и получаю <!DOCTYPE html> в результате в str1