I am making a test app with Android. I have a json file and i want to read it into activity class. Here is the json file. Wrote the code but the code doesn't recognize "question" variable i described upside.
{ "questions": [ { "id": "a200", "question": "lorem ipsum dolor _______ amet", "optionA": "lorem", "optionB": "ipsum", "optionC" : "dolor", "optionD": "sit" "rightAnswer" : "sit" }, { "id": "b200", "question": "_____ ipsum dolor sit amet", "optionA": "lorem", "optionB": "ipsum", "optionC" : "dolor", "optionD": "sit" "rightAnswer" : "lorem" }, { "id": "c200", "question": "lorem _____ dolor sit amet", "optionA": "lorem", "optionB": "ipsum", "optionC" : "dolor", "optionD": "sit" "rightAnswer" : "ipsum" }, ] }
And here is my QuizActivityAdjectives.java file's onCreate part.
public class QuizActivityAdjectives extends Activity { TextView txt_questionAdjective; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_quiz_adjectives); // Hangi xml dosyasının dikkate alınacağı belirlendi. // Reading json file from assets folder StringBuffer sb = new StringBuffer(); BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(getAssets().open( "Questions.json"))); String temp; while ((temp = br.readLine()) != null) sb.append(temp); } catch (IOException e) { e.printStackTrace(); } finally { try { br.close(); // stop reading } catch (IOException e) { e.printStackTrace(); } } // Try to parse JSON try { // Creating JSONObject from String JSONObject jsonObjMain = new JSONObject(); // Creating JSONArray from JSONObject JSONArray jsonArray = jsonObjMain.getJSONArray("questions"); // JSONArray has four JSONObject for (int i = 0; i < jsonArray.length(); i++) { // Creating JSONObject from JSONArray JSONObject jsonObj = jsonArray.getJSONObject(i); // Getting data from individual JSONObject int id = jsonObj.getInt("id"); String question = jsonObj.getString("question"); String optionA = jsonObj.getString("optionA"); String optionB = jsonObj.getString("optionB"); String optionC = jsonObj.getString("optionC"); String optionD = jsonObj.getString("optionD"); String rightAnswer = jsonObj.getString("rightAnswer"); } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } String myjsonstring = sb.toString(); txt_questionAdjective = (TextView) findViewById(R.id.txt_questionAdjective); txt_questionAdjective.setText(question); //THE CODE ERRORS HERE. CAN NOT RESOLVE QUESTION VARIABLE. }
How can i get rid of that matter? And is the code this way making any sense? Will it work ?
The error : "question cannot be resolved to a variable" (The comment line i wrote at the bottom)
EDIT:SOLVED I wouldn't ever expect but after correcting json file (there should've been a comma which i'ven't noticed, i was gotta change the id value which have been described as int and given in the json file with a char (like a200). After that the problem was gone and the json was fetched.
You create a new JSONObject, instead of parsing your file:
JSONObject jsonObjMain = new JSONObject();
should be:
JSONObject jsonObjMain = new JSONObject(sb.toString());
Edit:
Now I understood your question.
You are out of scope and variable question
doesn't exist anymore. Furthermore there are multiple questions , how do you expect to set it to your TextView
?
You can save questions into an array and use any of them like this:
List<String> questions = new ArrayList<>();
try {
...
for (int i = 0; i < jsonArray.length(); i++) {
...
questions.add(jsonObj.getString("question"));
...
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String myjsonstring = sb.toString();
// Check if questions have been fetched
if (questions.size() > 0) {
txt_questionAdjective = (TextView) findViewById(R.id.txt_questionAdjective);
// Use the first question
txt_questionAdjective.setText(questions.get(0));
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.