其实我想在Android中为医疗应用制作MCQ!所以我想从我的数据库中得到问题和我可能的选择,但是当我试图让我的问题选择他时,我有一个问题。我的错误是由JSONException显示的,我不知道为什么:(
我用jsonlint.com查看我的JSON,所以我认为这样就可以了。 这是我的JSON:
{
"QCM": {
"1": {
"question": "Est-ce que Captain America gagne contre IronMan",
"id": "31"
},
"2": {
"choix": "Oui"
},
"3": {
"choix": "Non"
}
}
}
这是我的Android应用程序中的JAVA。
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 :(得分:2)
并非JSON数据中的每个JSONObject
都有“问题”和“choix”键。我很确定你得到了org.json.JSONException: No value for ......
在尝试访问之前,请务必检查是否存在“question”或“choix”参数。
修改强>
要进行检查,您可以使用JSONObject.has(String parameter)
或JSONObject.isNull(String parameter)
方法。链接:http://developer.android.com/reference/org/json/JSONObject.html#has(java.lang.String)
答案 1 :(得分:0)
我建议您更改JSON的结构。拥有问题的JSONObject和选择的JSONArray。如果您仍想继续执行当前的实施,仍然取决于您。您可以尝试使用的是JSON.optString()。它将返回一个值,具体取决于键是否存在,否则它将返回一个空字符串。根据其描述:
返回按名称映射的值(如果存在),必要时强制转换,如果不存在此映射,则返回空字符串。
像这样使用它,改变你的:
String choix = obj.getString("choix");
到
String choix = obj.optString("choix");
它应该工作。你可以做得更好。
答案 2 :(得分:0)
正确答案是,首先从服务器获得响应,将其解析/转换为JSONObject,如
JSONObject rootObject = new JSONObject (response.toString());
然后按照您的JSON解析进行操作。这肯定会有。
JSONObject lesQuestions = rootObject.getJSONObject("QCM");
答案 3 :(得分:0)
Android JSON
解析器提供了另一种可选方法,该方法以&#34; opt
&#34;开头。与以&#34; get
&#34;开头的方法相比较。 opt
的重要性在于,它会返回NULL
结果而不是throw
和exception
。
E.g:
如果obj.getString("question");
没有值为&#34; throw
的关键字,则{p> exception
会JSON
question
。&#34;
然而,
如果String s = obj.optString("question");
没有值为&#34的关键字,则 throw
不 exception
JSON
question
}&#34 ;.您的结果字符串只是NULL
。
我发现opt
方法非常方便,而不是get
throws
的{{1}}方法。