2016-04-29 3 views
0

На самом деле я хочу сделать MCQ для медицинского приложения на Android! Так что я хочу получить вопрос и мой возможный выбор из моей базы данных, но у меня есть проблема, когда я пытаюсь получить свой вопрос, чтобы его выбрать. Моя ошибка показала на JSONException и я не знаю почему :(Я не могу прочитать мой JSON в своей заявке

я просматриваю JSON с jsonlint.com, так что я думаю, что это нормально для этого Вот мой JSON:.

{ 
    "QCM": { 
     "1": { 
      "question": "Est-ce que Captain America gagne contre IronMan", 
      "id": "31" 
     }, 
     "2": { 
      "choix": "Oui" 
     }, 
     "3": { 
      "choix": "Non" 
     } 
    } 
} 

и вот мой JAVA из моего Android приложения.

try { 
         JSONObject lesQuestions = response.getJSONObject("QCM"); 
         Iterator<?> keys = lesQuestions.keys(); 

         while(keys.hasNext()) { 
          String key = (String) keys.next(); 

          if (lesQuestions.get(key) instanceof JSONObject) { 
           JSONObject obj = (JSONObject) lesQuestions.get(key); 
           String signesCliniques = obj.getString("question"); 
           String choix = obj.getString("choix"); 
           lesChoixButton.setText(choix); 
           symptomesQuestions.setText(signesCliniques); 

          } 
         } 
        } 

я надеюсь, что вы можете мне помочь!

+0

В чем исключение? Можете ли вы разместить свои журналы? –

+0

Неужели у отлаживается? Что такое контент в lesQuestions? – Raghavendra

+0

Извините, это просто сказать «org.json.JSONException: No Value For choix». И я не знаю, как использовать отладку:/У вас хороший учебник ^^? –

ответ

2

Не каждый JSONObject в данных JSON есть «вопрос» и «с hoix ". Я совершенно уверен, что вы получаете org.json.JSONException: No value for ......

Перед тем, как попытаться получить к нему доступ, убедитесь, что есть параметр «вопрос» или «choix».

EDIT:

Чтобы проверить, вы можете использовать JSONObject.has(String parameter) или JSONObject.isNull(String parameter) метод. Ссылка: http://developer.android.com/reference/org/json/JSONObject.html#has(java.lang.String)

+1

Nice catch @ccsnoopy. – Raghavendra

+1

Было бы лучше, если бы он изменил структуру своего JSON. –

+1

Да, я согласен, структура может быть лучше. например могут быть отдельные ответы и вопросы. –

0

Предлагаю изменить структуру вашего JSON. Имея JSONObject для вопроса и JSONArray для выбора. Тем не менее, вам все равно, если вы все еще хотите продолжить свою текущую реализацию. То, что вы можете попытаться использовать, - JSON.optString(). Он будет возвращать значение, зависящее, если ключ существует, иначе он вернет пустую строку. В соответствии с его описанием:

Возвращает значение, отображаемое по имени, если оно существует, при необходимости принудительное его или пустую строку, если такое отображение не существует.

Используйте это как так, измените:

String choix = obj.getString("choix"); 

в

String choix = obj.optString("choix"); 

Он должен работать. Вы можете сделать это лучше, хотя.

+0

Привет, Спасибо за это, но это не решило мою проблему, когда я это делаю, я могу только перейти к моему «Choix», но не в моем вопросе, он может читать choix, но не вопрос. –

+0

Я просто использовал 'String choix' в качестве образца. Используйте его также для' String signesCliniques' , –

+0

это то, что я сделал, он не показывал мой вопрос, но только мой выбор :( –

0

Правильный ответ, первый, когда вы получите свой ответ с сервера, разобрать/преобразовать его в JSONObject как

JSONObject rootObject = new JSONObject (response.toString()); 

и затем следовать вашей JS синтаксический, как вы делаете. Это будет сделано точно.

JSONObject lesQuestions = rootObject.getJSONObject("QCM"); 
+0

Он уже умеет разбирать его. –

0

Android JSON парсеры обеспечить еще один дополнительный метод, который начинается с «opt» по сравнению с методами, которые начинаются с «get». Значение с opt заключается в том, что оно вернет результат NULL, а не throw a exception.

E.г: «question»

obj.getString("question"); будет throwexception если JSON не имеет ключа со значением

Однако

String s = obj.optString("question"); будет НЕthrowexception если JSON не имеет ключа со значением «question». Ваша строка результата будет равна NULL.

Я считаю, что методы opt очень удобны, а не методы get, которые throwsexceptions.