Помогите с обработкой ошибок JSON и API Google Translate - PullRequest
2 голосов
/ 13 апреля 2011

В настоящее время я анализирую ответ JSON от Google Translate API. Я могу сделать это без проблем. Ввиду того, что у меня нет большого опыта работы с XML (я больше разбираюсь в XML), мне трудно понять, как реализовать некоторую обработку ошибок в моем анализе JSON. Я использую библиотеку JSON j2me.

Вот успешный ответ:

{"responseData": {"translatedText":"Teks te vertaal ...","detectedSourceLanguage":"en"}, "responseDetails": null, "responseStatus": 200}

А вот и неудачный ответ:

{"responseData": null, "responseDetails": "could not reliably detect source language", "responseStatus": 400}

Итак, если перевод не удастся, я хочу поместить значение responseDetails в строку. Вот мой код синтаксического анализа, который в настоящее время неправильно анализирует responseDetails. Вместо этого ловится «улов» попытки.

try {
            JSONObject responseObject = new JSONObject(response);
            if (responseObject != null) {
                JSONObject responseData = responseObject
                        .getJSONObject("responseData");
                if (responseData != null) {
                    String translatedText = responseData
                            .getString("translatedText");
                    Notify.alert(translatedText);
                } else {
                    String responseDetails = responseObject
                            .getString("responseDetails");
                    Notify.alert(responseDetails);
                }
            }
        } catch (Exception e) {
            Notify.alert("Unable to translate!");
        }

Кто-нибудь может увидеть, где я иду не так?

Спасибо!

1 Ответ

3 голосов
/ 13 апреля 2011

Поскольку вы говорите, что блок catch срабатывает, я бы начал отладку, посмотрев, что генерируется Exception.Вы можете просто добавить строку предупреждения, чтобы она включала e.toString ().

Поэтому измените ваше предупреждение в блоке перехвата следующим образом:

Notify.alert("Unable to translate! " + e.toString());

и посмотрите, какая именно ошибка выдаетсяis.

Исходя из вашего комментария, да, похоже, что он пытается создать JSONObject для нулевого значения, поэтому вложите другой блок try / catch и соответствующим образом проанализируйте его таким образом.

try {
    JSONObject responseObject = new JSONObject(response);
    if (responseObject != null) {
        /* Try create a new JSON object from the 
         * responseData object. If it fails, 
         * display an alert */
        try {
            JSONObject responseData = responseObject
                    .getJSONObject("responseData");

            if (responseData != null) {
                String translatedText = responseData
                        .getString("translatedText");
                Notify.alert(translatedText);
            } 

        } catch (Exception e) {
            String responseDetails = responseObject
                    .getString("responseDetails");
            Notify.alert(responseDetails);
        }
    }
} catch (Exception e) {
    Notify.alert("Unable to translate outer block!");
}
...