Очень простое несообщаемое исключение JSONObject org.json.JSONException во время разработки

Это очень просто: с помощью Android Studio я не могу создать проект, потому что получаю сообщение об ошибке:

Ошибка: java: незарегистрированное исключение org.json.JSONException; должен быть пойман или объявлен брошенным

Вот оскорбительный код:

public static JSONObject toJsonObject(String json){
    JSONObject jsonObj = new JSONObject(json);
    return jsonObj;
}

Я импортирую org.json.JSONObject; Кстати.

Волнистая красная линия находится под «новым JSONObject (json)». Это не похоже на передачу String, но везде, где я видел, например. https://github.com/douglascrockford/JSON-java/blob/master/JSONObject.java предполагает, что это возможно.

Я попытался сделать класс и метод нестатическими и перестроил проект / перезапустил Android Studio.

Я знаю, что это должно быть что-то простое, что я пропустил ...


person james pearce    schedule 18.08.2014    source источник
comment
используйте инструкцию try catch   -  person Michael Shrestha    schedule 18.08.2014


Ответы (3)


Практически всегда нужно заключать все случаи использования JSONObject и JSONArray в блоки try-catch, улавливающие исключение JSONException. В большинстве случаев это шаблонный код, который никогда не запустится. Однако в случае использования new JSONObject (...) и new JSONArray (...) блок try-catch жизненно важен: он генерирует исключение, если переданная строка не является допустимой строкой JSON. Убедитесь, что вы всегда как-нибудь с этим справляетесь. В вашем случае я бы порекомендовал это (где TAG - это имя вашего класса):

public static JSONObject toJsonObject(String json){
    try {
        return new JSONObject(json);
    } catch (JSONException e) {
        Log.e(TAG, "Invalid JSON string: " + json, e);
        return null;
    }
}

Если вы не поместите блок try-catch в свой метод toJsonObject (...) и вместо этого добавите «throws JSONException» в объявление метода (что фактически решит ошибку), полный метод станет полностью избыточным, кстати, потому что он ничего не делает, что не делает конструктор JSONObject.

person 0101100101    schedule 18.08.2014
comment
Всем спасибо - я пометил это как ответ, так как у него лучшее описание, но с вами все в порядке! Я добавил пробную ловушку, и теперь она работает. - person james pearce; 18.08.2014

Вы должны использовать try-catch или Throw JSONException

public static JSONObject toJsonObject(String json){
    try{
            JSONObject jsonObj = new JSONObject(json);
            return jsonObj;
    }
    catch (JSONException e)
    {
    //do something
    }
  }
person Michael Shrestha    schedule 18.08.2014

Я думаю, это потому, что вы не использовали try-catch или throw в своем коде. Используйте в своем коде блок try-catch. А потом проверьте, решена ли проблема ..

person njnjnj    schedule 18.08.2014