0

I am newbie to android and it designing a an app that will read questions and options from a json file and will set text on the text view , and next question will be displayed only if correct option is clicked, but I am not able to figure out how I should be doing this.

{
"questions": [
    {
            "question": "Question....",
            "opt1": "ravi@gmail.com",
            "opt2": "country",
            "opt3" : "male",
            "opt4": "option 4",
            "coropt": "b"
            },
    {
            "question": "Question....",
            "opt1": "johnny_depp@gmail.com",
            "opt2": "country",
            "opt3" : "male",
            "opt4": "option 4",
            "coropt": "a"
            },
    {
            "question": "Question....",
            "opt1": "leonardo_dicaprio@gmail.com",
            "opt2": "country",
            "opt3" : "male",
            "opt4": "option 4",
            "coropt": "d"
            },
    {
            "question": "Question....",
            "opt1": "john_wayne@gmail.com",
            "opt2": "country",
            "opt3" : "male",
            "opt4": "option 4",
            "coropt": "c"
            }
]
}

here is the view in which json array data needs to be placed one by one

this is the code I am working on but I am stuck how and where to parse json data.

public class JavaQuiz extends AppCompatActivity {

TextView ltv, tv1, tv2, tv3, tv4;

// JSON Node names
private static final String TAG_QUESTIONS = "questions";
private static final String TAG_QUESTION = "question";
private static final String TAG_OPTION1 = "opt1";
private static final String TAG_OPTION2 = "opt2";
private static final String TAG_OPTION3 = "opt3";
private static final String TAG_OPTION4 = "opt4";
private static final String TAG_CORRECTOPTION = "coropt";

// contacts JSONArray
JSONArray questions = null;

// Hashmap for ListView
ArrayList<HashMap<String, String>> questionList;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_java_quiz);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    ltv = (TextView) findViewById(R.id.textView7);
    tv1 = (TextView) findViewById(R.id.textView8);
    tv2 = (TextView) findViewById(R.id.textView9);
    tv3 = (TextView) findViewById(R.id.textView10);
    tv4 = (TextView) findViewById(R.id.textView11);

}

class QuestionShow extends AsyncTask<String, Void, Void> {
    ProgressDialog progressDialog;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        progressDialog = new ProgressDialog(JavaQuiz.this);
        progressDialog.setTitle("Fetching");
        progressDialog.setMessage("Setting question");
        progressDialog.show();

    }

    @Override
    protected Void doInBackground(String... params) {
        HttpClient client = new DefaultHttpClient();
  /*                HttpPost post=new          HttpPost("http://192.168.1.5/questions.json");
            post.setEntity(new UrlEncodedFormEntity(params[0]));
            HttpResponse response = client.execute(post);
 */
        String jsonStr = "http://192.168.1.5/questions.json";
/*                if (jsonStr != null) {
                try {
                    JSONObject jsonObj = new JSONObject(jsonStr);

                    // Getting JSON Array node
                    questions = jsonObj.getJSONArray(TAG_QUESTIONS);

                    // looping through All questions
                    for (int i = 0; i < questions.length(); i++) {
                        JSONObject q = questions.getJSONObject(i);

                        String question = q.getString(TAG_QUESTION);
                        String op1 = q.getString(TAG_OPTION1);
                        String op2 = q.getString(TAG_OPTION2);
                        String op3 = q.getString(TAG_OPTION3);
                        String op4 = q.getString(TAG_OPTION4);
                        String coropt = q.getString(TAG_CORRECTOPTION);
  /*                            // tmp hashmap for single question
                        HashMap<String, String> ques = new HashMap<String, String>();

                        // adding each child node to HashMap key => value
                        ques.put(TAG_QUESTION, question);
                        ques.put(TAG_OPTION1, op1);
                        ques.put(TAG_OPTION2, op2);
                        ques.put(TAG_OPTION3, op3);
                        ques.put(TAG_OPTION4, op4);
                        ques.put(TAG_CORRECTOPTION, coropt);

                        // adding contact to contact list
                        questionList.add(ques);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
        }
 */
        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        String jsonStr = "http://192.168.1.5/questions.json";
        if (jsonStr != null) {
            try {
                JSONObject jsonObj = new JSONObject(jsonStr);

                // Getting JSON Array node
                questions = jsonObj.getJSONArray(TAG_QUESTIONS);

                // looping through All questions
                for (int i = 0; i < questions.length(); ) {
                    JSONObject q = questions.getJSONObject(i);

                    String question = q.getString(TAG_QUESTION);
                    String op1 = q.getString(TAG_OPTION1);
                    String op2 = q.getString(TAG_OPTION2);
                    String op3 = q.getString(TAG_OPTION3);
                    String op4 = q.getString(TAG_OPTION4);
                    String coropt = q.getString(TAG_CORRECTOPTION);

                    ltv.setText(question);
                    tv1.setText(op1);
                    tv2.setText(op1);
                    tv3.setText(op1);
                    tv4.setText(op1);



                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }
}
public  void answer(View view)
{
    String
    if (view==tv1)
    {
        if(tv1.getText().toString()==)
    }
}
}

1 Answers1

0

Firstly to run the AsyncTask you need to call the AsyncTask from your onCreate method as shown below

public class JavaQuiz extends AppCompatActivity {
    TextView ltv, tv1, tv2, tv3, tv4;


    // contacts JSONArray
    JSONArray questions = null;

    // Hashmap for ListView
    ArrayList<HashMap<String, String>> questionList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_java_quiz);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        ltv = (TextView) findViewById(R.id.textView7);
        tv1 = (TextView) findViewById(R.id.textView8);
        tv2 = (TextView) findViewById(R.id.textView9);
        tv3 = (TextView) findViewById(R.id.textView10);
        tv4 = (TextView) findViewById(R.id.textView11);


        String jsondata = "{\n" +
                "\"questions\": [\n" +
                "    {\n" +
                "            \"question\": \"Question....\",\n" +
                "            \"opt1\": \"ravi@gmail.com\",\n" +
                "            \"opt2\": \"country\",\n" +
                "            \"opt3\" : \"male\",\n" +
                "            \"opt4\": \"option 4\",\n" +
                "            \"coropt\": \"b\"\n" +
                "            },\n" +
                "    {\n" +
                "            \"question\": \"Question....\",\n" +
                "            \"opt1\": \"johnny_depp@gmail.com\",\n" +
                "            \"opt2\": \"country\",\n" +
                "            \"opt3\" : \"male\",\n" +
                "            \"opt4\": \"option 4\",\n" +
                "            \"coropt\": \"a\"\n" +
                "            },\n" +
                "    {\n" +
                "            \"question\": \"Question....\",\n" +
                "            \"opt1\": \"leonardo_dicaprio@gmail.com\",\n" +
                "            \"opt2\": \"country\",\n" +
                "            \"opt3\" : \"male\",\n" +
                "            \"opt4\": \"option 4\",\n" +
                "            \"coropt\": \"d\"\n" +
                "            },\n" +
                "    {\n" +
                "            \"question\": \"Question....\",\n" +
                "            \"opt1\": \"john_wayne@gmail.com\",\n" +
                "            \"opt2\": \"country\",\n" +
                "            \"opt3\" : \"male\",\n" +
                "            \"opt4\": \"option 4\",\n" +
                "            \"coropt\": \"c\"\n" +
                "            }\n" +
                "]\n" +
                "}";

        new QuestionShow(JavaQuiz.this).execute(jsondata);

        //If using URL use this below
//        new QuestionShow(JavaQuiz.this).execute("http://192.168.1.5/questions.json");

    }

    public class QuestionShow extends AsyncTask<String, String, ArrayList<HashMap<String, String>>> {


        ProgressDialog progressDialog;

        Context context;

        public QuestionShow(Context context) {
            this.context = context;

        }

        // JSON Node names
        public String TAG_QUESTIONS = "questions";
        public String TAG_QUESTION = "question";
        public String TAG_OPTION1 = "opt1";
        public String TAG_OPTION2 = "opt2";
        public String TAG_OPTION3 = "opt3";
        public String TAG_OPTION4 = "opt4";
        public String TAG_CORRECTOPTION = "coropt";


        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressDialog = new ProgressDialog(context);

            progressDialog.setTitle("Fetching");
            progressDialog.setMessage("Setting question");
            progressDialog.show();

        }

        @Override
        protected ArrayList<HashMap<String, String>> doInBackground(String... params) {
        /*Your networking activities can be done here and the params[0] URL can be passed to it*/

//            HttpClient client = new DefaultHttpClient();
//            HttpPost post = new HttpPost("http://192.168.1.5/questions.json");
//            try {
//                post.setEntity(new UrlEncodedFormEntity(params[0]));
//            } catch (UnsupportedEncodingException e) {
//                e.printStackTrace();
//            }
//            HttpResponse response = client.execute(post);
//

            String jsonStr = params[0];

            if (jsonStr != null) {
                try {
                    JSONObject jsonObj = new JSONObject(jsonStr);

                    // Getting JSON Array node
                    questions = jsonObj.getJSONArray(TAG_QUESTIONS);

                    questionList = new ArrayList<>();
                    // looping through All questions
                    for (int i = 0; i < questions.length(); i++) {
                        JSONObject q = questions.getJSONObject(i);

                        String question = q.getString(TAG_QUESTION);
                        String op1 = q.getString(TAG_OPTION1);
                        String op2 = q.getString(TAG_OPTION2);
                        String op3 = q.getString(TAG_OPTION3);
                        String op4 = q.getString(TAG_OPTION4);
                        String coropt = q.getString(TAG_CORRECTOPTION);
                        // tmp hashmap for single question
                        HashMap<String, String> ques = new HashMap<String, String>();

                        // adding each child node to HashMap key => value
                        ques.put(TAG_QUESTION, question);
                        ques.put(TAG_OPTION1, op1);
                        ques.put(TAG_OPTION2, op2);
                        ques.put(TAG_OPTION3, op3);
                        ques.put(TAG_OPTION4, op4);
                        ques.put(TAG_CORRECTOPTION, coropt);


                        // adding contact to contact list
                        questionList.add(ques);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

//            }
            return questionList;

        }


        @Override
        protected void onPostExecute(ArrayList<HashMap<String, String>> hashMapArrayList) {

            if (progressDialog.isShowing()) {
                progressDialog.dismiss();
            }

            if (hashMapArrayList.size() > 0) {


                ltv.setText(hashMapArrayList.get(2).get(TAG_QUESTION));
                tv1.setText(hashMapArrayList.get(2).get(TAG_OPTION1));
                tv2.setText(hashMapArrayList.get(2).get(TAG_OPTION2));
                tv3.setText(hashMapArrayList.get(2).get(TAG_OPTION3));
                tv4.setText(hashMapArrayList.get(2).get(TAG_OPTION4));


            } else {
                Toast.makeText(getApplicationContext(), "No data found", Toast.LENGTH_SHORT).show();
            }
        }
    }
//    public  void answer(View view)
//    {
//        String
//        if (view==tv1)
//        {
//            if(tv1.getText().toString()==)
//        }
//    }
}

Since you have a webservice running to get the data, you will need to call the webservice inside the AsyncTask in your doInBackground() method.

Then you need to pass on the received result to the onPostExecute() method.

Receive the data in the onPostExecute and then setText them in your layouts.

I have selected first question only you can iterate or select your preferred question to display or even change the json output to be parsed.

The result is procured successfully as shown below in the screenshot. Parsed Result

Shadab K
  • 1,677
  • 1
  • 16
  • 25