0

I am building an android app quiz, i am learning how to get data from API and display it. So far, i am doing good. But i can't seems to get further. The free api i am using is this

https://www.opentdb.com/api.php?amount=10&category=10 

My problem is i can't seems to match the question and the correct answer from the object. I always get random question and random correct answer on button click

This is my code

 //url = https://www.opentdb.com/api.php?amount=25 public class MainActivity extends AppCompatActivity { private TextView textData; private TextView answer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn = (Button) findViewById(R.id.btnId); textData = (TextView) findViewById(R.id.txtV); answer = (TextView) findViewById(R.id.answerCorrect); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //executing the AsyncTask on button click new JSONTask().execute("https://www.opentdb.com/api.php?amount=10&category=10&difficulty=easy&type=multiple"); } }); } class JSONTask extends AsyncTask<String, String, String> { @Override protected String doInBackground(String... params) { HttpURLConnection connection = null; StringBuffer stringBuffer; BufferedReader bufferedReader = null; try { //passing url here URL url = new URL(params[0]); //making a connection connection = (HttpURLConnection) url.openConnection(); //connecting to the server connection.connect(); //getting object from server and storing to inputStream InputStream stream = connection.getInputStream(); //buffer reader to read the data from inputstream bufferedReader = new BufferedReader(new InputStreamReader(stream)); //holding data stringBuffer = new StringBuffer(); String line = ""; while ((line = bufferedReader.readLine()) != null) { stringBuffer.append(line); } //toString will be passed to the onPostExecute result value //return completed JSON object String finalOBJ = stringBuffer.toString(); //passing entire json object in new JSON object instance. JSONObject jsonObject = new JSONObject(finalOBJ); //getting the array from the main object JSONArray jsonArray = jsonObject.getJSONArray("results"); //passing the desired index from the results JSONObject fobj = jsonArray.getJSONObject(3); JSONObject ansobj = jsonArray.getJSONObject(4); //getting the key from results array String question = fobj.getString("question"); return question; } catch (IOException | JSONException e) { e.printStackTrace(); } finally { if (connection != null) { connection.disconnect(); } try { if (bufferedReader != null) { bufferedReader.close(); } } catch (IOException e) { e.printStackTrace(); } } return null; } @Override //here result will take the data protected void onPostExecute(String result) { super.onPostExecute(result); textData.setText(result); } } 

JSON APi i am taking from that site.

What i want to achieve is the show the question with the correct answer from same object.

{ "response_code":0, "results":[ { "category":"Entertainment: Books", "type":"multiple", "difficulty":"easy", "question":"George Orwell wrote this book, which is often considered a statement on government oversight.", "correct_answer":"1984", "incorrect_answers":[ "The Old Man and the Sea", "Catcher and the Rye", "To Kill a Mockingbird" ] }, { "category":"Entertainment: Books", "type":"multiple", "difficulty":"hard", "question":"Which author and poet famously wrote the line, &quot;The female of the species is more deadly than the male&quot;?", "correct_answer":"Rudyard Kipling", "incorrect_answers":[ "Edgar Allan Poe", "William Shakespeare", "William Wordsworth" ] }, { "category":"Entertainment: Books", "type":"multiple", "difficulty":"hard", "question":"In the book &quot;The Martian&quot;, how long was Mark Watney trapped on Mars (in Sols)?", "correct_answer":"549 Days", "incorrect_answers":[ "765 Days", "401 Days", "324 Days" ] }, { "category":"Entertainment: Books", "type":"multiple", "difficulty":"hard", "question":"In the Harry Potter universe, what is Cornelius Fudge&#039;s middle name?", "correct_answer":"Oswald", "incorrect_answers":[ "James", "Harold", "Christopher" ] }, { "category":"Entertainment: Books", "type":"multiple", "difficulty":"hard", "question":"In the Harry Potter universe, who does Draco Malfoy end up marrying?", "correct_answer":"Astoria Greengrass", "incorrect_answers":[ "Pansy Parkinson", "Millicent Bulstrode", "Hermione Granger" ] }, { "category":"Entertainment: Books", "type":"multiple", "difficulty":"hard", "question":"What is Hermione Granger&#039;s middle name?", "correct_answer":"Jean", "incorrect_answers":[ "Jane", "Emma", "Jo" ] }, { "category":"Entertainment: Books", "type":"multiple", "difficulty":"hard", "question":"What is Ron Weasley&#039;s middle name?", "correct_answer":"Bilius", "incorrect_answers":[ "Arthur", "John", "Dominic" ] }, { "category":"Entertainment: Books", "type":"multiple", "difficulty":"medium", "question":"What was the name of the Mysterious Island, in Jules Verne&#039;s &quot;The Mysterious Island&quot;?", "correct_answer":"Lincoln Island", "incorrect_answers":[ "Vulcania Island", "Prometheus Island", "Neptune Island" ] }, { "category":"Entertainment: Books", "type":"multiple", "difficulty":"easy", "question":"What&#039;s Harry Potter&#039;s dad&#039;s name?", "correct_answer":"James Potter", "incorrect_answers":[ "Joey Potter", "Frank Potter", "Hairy Potter Sr." ] }, { "category":"Entertainment: Books", "type":"multiple", "difficulty":"medium", "question":"The book &quot;The Little Prince&quot; was written by...", "correct_answer":"Antoine de Saint-Exup&eacute;ry", "incorrect_answers":[ "Miguel de Cervantes Saavedra", "Jane Austen", "F. Scott Fitzgerald" ] } ] }

}

1 Answer 1

0

You can convert your JSON data to Model class(eg. AttemptItem) object, then access the question & answers field of it through the object.

Check this answer How do I convert a JSONObject to class object?

You can get the class by pasting your JSON here http://www.jsonschema2pojo.org/

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.