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, "The female of the species is more deadly than the male"?",
"correct_answer":"Rudyard Kipling",
"incorrect_answers":[
"Edgar Allan Poe",
"William Shakespeare",
"William Wordsworth"
]
},
{
"category":"Entertainment: Books",
"type":"multiple",
"difficulty":"hard",
"question":"In the book "The Martian", 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'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's middle name?",
"correct_answer":"Jean",
"incorrect_answers":[
"Jane",
"Emma",
"Jo"
]
},
{
"category":"Entertainment: Books",
"type":"multiple",
"difficulty":"hard",
"question":"What is Ron Weasley'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's "The Mysterious Island"?",
"correct_answer":"Lincoln Island",
"incorrect_answers":[
"Vulcania Island",
"Prometheus Island",
"Neptune Island"
]
},
{
"category":"Entertainment: Books",
"type":"multiple",
"difficulty":"easy",
"question":"What's Harry Potter's dad'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 "The Little Prince" was written by...",
"correct_answer":"Antoine de Saint-Exupéry",
"incorrect_answers":[
"Miguel de Cervantes Saavedra",
"Jane Austen",
"F. Scott Fitzgerald"
]
}
]
}
}
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/
Firebase Cloud Functions: PubSub, "res.on is not a function"
TypeError: Cannot read properties of undefined (reading 'createMessageComponentCollector')
I'm having trouble in changing my basic adapter implementation to the custom adapter implementationI'm getting errors while getting the values dynamically into the custom adapter
I have a menu where i get various items and their imagesI want to get images from server but when i try to do so
I implemented a test app using SimpleExoPlayer which works fineI would like now to add audiofocus to my app