2016-04-29 7 views
0

Eigentlich möchte ich einen MCQ für eine medizinische Anwendung in Android machen! Also ich möchte Frage und meine mögliche Wahl von meiner Datenbank bekommen, aber ich habe ein Problem, wenn ich versuche, meine Frage zu bekommen, die ihn Wahl hat. Mein Fehler wird durch die JSONException zeigte, und ich weiß nicht, warum :(Ich kann meine JSON in meiner Anwendung nicht lesen

ich meine JSON überprüfen mit jsonlint.com so dass ich denke, es ist für das in Ordnung ist Hier ist meine JSON.

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

und hier ist meine JAVA von meinem Android-Anwendung.

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); 

          } 
         } 
        } 

ich hoffe, dass Sie mir helfen können!

+0

Was ist die Ausnahme? Können Sie Ihre Protokolle veröffentlichen? –

+0

Haben Sie debuggen? Was ist der Inhalt von lesQuestions? – Raghavendra

+0

Oh Entschuldigung, es ist nur sagen "org.json.JSONException: No Value For Choix". Und ich weiß nicht, wie man das debuggen benutzt:/hast du ein gutes Tutorial ^^? –

Antwort

2

Nicht jeder JSONObject in Ihre JSON-Daten hat „Frage“ und „c hoix "Schlüssel. Ich bin mir ziemlich sicher, dass Sie erhalten org.json.JSONException: No value for ......

Überprüfen Sie, ob es "Frage" oder "Choix" -Parameter gibt, bevor Sie versuchen, darauf zuzugreifen.

EDIT:

Um zu überprüfen, können Sie JSONObject.has(String parameter) oder JSONObject.isNull(String parameter) Methode verwenden. Link: http://developer.android.com/reference/org/json/JSONObject.html#has(java.lang.String)

+1

Nizza catch @ccsnoopy. – Raghavendra

+1

Es wäre besser, wenn er die Struktur seines JSON ändern würde. –

+1

ja stimme ich zu, die Struktur könnte besser sein. z.B. getrennte Antworten und Fragen vielleicht. –

0

Ich schlage vor, die Struktur Ihres JSON zu ändern. Mit einem JSONObject für die Frage und einem JSONArray für die Optionen. Dennoch bleibt Ihnen überlassen, ob Sie Ihre aktuelle Implementierung noch fortsetzen möchten. Was Sie versuchen könnten, ist JSON.optString(). Es würde einen Wert zurückgeben, der davon abhängt, ob der Schlüssel existiert, andernfalls wird eine leere Zeichenfolge zurückgegeben. Gemäß der Beschreibung:

Gibt den Wert zurück, der durch den Namen zugeordnet ist, falls vorhanden, der ihn bei Bedarf erzwingt, oder den leeren String, wenn keine solche Zuordnung vorhanden ist.

Verwenden Sie es wie so, ändern Sie Ihre:

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

zu

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

Es sollte funktionieren. Du kannst es aber besser machen.

+0

Hallo, Vielen Dank dafür, aber es hat mein Problem nicht gelöst, wenn ich das tue, kann ich nur auf meinen "Choix" zugreifen, aber nicht auf meine Frage, es kann choix lesen, aber nicht fragen. –

+0

Ich habe gerade die 'String choix' als Beispiel benutzt. Benutze sie auch für deine' String signesCliniques' . –

+0

es ist, was ich getan habe, es zeigte nicht meine Frage, aber nur meine Wahl :( –

0

Die richtige Antwort ist, zuerst, wenn Sie Ihre Antwort vom Server erhalten, analysiert/wandelt es in JSONObject wie

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

und dann JSON Parsen folgen, wie Sie tun werden. Das wird sicher gehen.

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

Er ist bereits in der Lage, es zu analysieren. –

0

Android JSON Parser bieten eine weitere optionale Methode, die mit „opt“ im Vergleich zu Methoden beginnt, die mit „get“ beginnen. Die Signifikanz mit opt ist, dass es ein NULL Ergebnis zurückgibt und nicht throw ein exception.

E.g:

obj.getString("question"); wird throw ein exception wenn die JSON keinen Schlüssel mit Wert hat "question."

jedoch

String s = obj.optString("question"); wird NICHTthrow ein exception wenn die JSON keinen Schlüssel mit dem Wert "question" haben. Ihre Ergebniszeichenfolge lautet einfach NULL.

Ich finde die opt Methoden sehr handlich eher als die get Methoden, die throwsexceptions.

Verwandte Themen