Как добавить данные JSON в массив? Я хочу изменить данные, когда я нажимаю любую кнопку - PullRequest
0 голосов
/ 29 июня 2018

Я хочу сохранить эти данные JSON в массивах. «вопрос» должен быть массивом, «выбор» и «правильный» также должны быть. И когда я нажимаю кнопки, это должно изменить значения. Как вы понимаете, я пытаюсь сделать приложение викторины. Этот код работает, но когда я делаю btnFirst.setText(choiceList.get(4)); не работает.

Код MainActivity.java

public class MainActivity extends AppCompatActivity {

RequestQueue requestQueue;
TextView txtQuestion;
Button btnFirst, btnSecond, btnThird, btnFourth;
ArrayList<String> questionList = new ArrayList<>();
ArrayList<String> choiceList = new ArrayList<>();
ArrayList<Boolean> correctList = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    requestQueue = Volley.newRequestQueue(this);
    txtQuestion = findViewById(R.id.txtQuestion);
    btnFirst = findViewById(R.id.btnFirst);
    btnSecond = findViewById(R.id.btnSecond);
    btnThird = findViewById(R.id.btnThird);
    btnFourth = findViewById(R.id.btnFourth);

    String url = "https://private-anon-a98702efdd-quizmasters.apiary-mock.com/questions";

    JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET, url, null,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    try{
                        for(int i = 0; i < response.length(); i++) {
                            JSONObject questionObject = response.getJSONObject(i);
                            String question = questionObject.getString("question");
                            questionList.add(question);
                            txtQuestion.setText(questionList.get(0));
                            JSONArray choicesArray = questionObject.getJSONArray("choices");
                            for(int j = 0; j < choicesArray.length(); j++) {
                                JSONObject currentObject = choicesArray.getJSONObject(j);
                                String choice = currentObject.getString("choice");
                                boolean correct = currentObject.getBoolean("correct");
                                choiceList.add(choice);
                                correctList.add(correct);
                            }
                            btnFirst.setText(choiceList.get(0));
                            btnSecond.setText(choiceList.get(1));
                            btnThird.setText(choiceList.get(2));
                            btnFourth.setText(choiceList.get(3));
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("myusarisoy", "" + error);
        }
    });
    requestQueue.add(jsonArrayRequest);
}
}

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Вы можете создать метод, который перебирает вопрос по заданному индексу.

public void nextQuestion(int index){

index++;
txtQuestion.setText(questionList.get(index));
btnFirst.setText(choiceList.get(index * 4));
btnSecond.setText(choiceList.get(index * 4 + 1));
btnThird.setText(choiceList.get(index * 4 + 2));
btnFourth.setText(choiceList.get(index * 4 + 3));

}

Определение переменной для отслеживания текущего вопроса.

public int index = 0;

Также измените метод OnResponse следующим образом.

@Override
public void onResponse(JSONArray response) {
                try{
                    for(int i = 0; i < response.length(); i++) {
                        JSONObject questionObject = response.getJSONObject(i);
                        String question = questionObject.getString("question");
                        questionList.add(question);
                        JSONArray choicesArray = questionObject.getJSONArray("choices");
                        for(int j = 0; j < choicesArray.length(); j++) {
                            JSONObject currentObject = choicesArray.getJSONObject(j);
                            String choice = currentObject.getString("choice");
                            boolean correct = currentObject.getBoolean("correct");
                            choiceList.add(choice);
                            correctList.add(correct);
                        }
                    }
                nextQuestion(index);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }

А в onClickListener вашей кнопки используйте ее как.

nextQuestion(index);
0 голосов
/ 29 июня 2018

Пожалуйста, вам нужно создать класс модели, чтобы сохранить все ваши данные.

public class MyPojo
{
    private Choices[] choices;

    private String question;

    public Choices[] getChoices ()
    {
        return choices;
    }

    public void setChoices (Choices[] choices)
    {
        this.choices = choices;
    }

    public String getQuestion ()
    {
        return question;
    }

    public void setQuestion (String question)
    {
        this.question = question;
    }

    @Override
    public String toString()
    {
        return "ClassPojo [choices = "+choices+", question = "+question+"]";
    }
}  


public class Choices
{
    private String correct;

    private String choice;

    public String getCorrect ()
    {
        return correct;
    }

    public void setCorrect (String correct)
    {
        this.correct = correct;
    }

    public String getChoice ()
    {
        return choice;
    }

    public void setChoice (String choice)
    {
        this.choice = choice;
    }

    @Override
    public String toString()
    {
        return "ClassPojo [correct = "+correct+", choice = "+choice+"]";
    }
}  

Теперь проанализируйте ваши данные, как показано ниже ...

ArrayList<MyPojo> allData = new ArrayList<>();
for (int i = 0; i > response.length(); i++) {
                JSONObject object = response.getJSONObject(i);
                MyPojo myPojo = new MyPojo();

                String question = object.optString("question");
                myPojo.setQuestion(question);

                JSONArray choicesArray = object.getJSONArray("choices");
                Choices[] choices = new Choices[choicesArray.length()];
                for (int j = 0; j < choicesArray.length(); j++) {
                    JSONObject choiceObj = choicesArray.getJSONObject(j);
                    String choice = choiceObj.optString("choice");
                    choices[j].setChoice(choice);
                    String correct = choiceObj.optString("correct");
                    choices[j].setCorrect(correct);
                }
                myPojo.setChoices(choices);
                allData.add(myPojo);  

Теперь передайте этот массив для вашего адаптера.
чтобы получить вопрос и выбор в адаптере.

String question=allData.get(position).getQuestion.

Choice choice[]=allData.get(poistion).getChoices().

Выполнить цикл по выбору найти и исправить из выбора

Счастливый код:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...