#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