获取数组的json格式的问题并将其放入android studio中的数组

时间:2018-10-25 08:41:48

标签: android arrays json object arraylist

这里的目标是从API检索JSON格式的数据,然后将数据转换为android studio中的数组。然后在文本视图中显示一个随机问题,该问题将不会重复。每次单击按钮时,问题都会更改。我如何使用数组/将数据解析到数组的逻辑存在问题。我不确定如何进行。感谢您的帮助

我的JSON格式

{
    "error": false,
    "message": "Successfully retrieved",
    "questions": [
        {
            "question": "Tell us about yourself?"
        },
        {
            "question": "Tell us about yourself2?"
        },
        {
            "question": "Tell us about yourself3?"
        },
        {
            "question": "Tell us about yourself4?"
        },
        {
            "question": "Tell us about yourself5?"
        }
    ]
}

到目前为止,我的代码(简化为该功能)

    public class MainActivity extends AppCompatActivity {
    // create arraylist to store question
    List<String> questionList = new ArrayList<>();
    // use max to decide the number of question
    // use i to find out the number of questions
    int i = 10;
    int min = 0;
    int max = i;
    int[] usedInt = new int[max];
    //create another array to put all the used integer inside for 0 repeition of question
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        final TextView textViewQuestions = (TextView) findViewById(R.id.questionView);

        usedInt = new int[i];
        Random r = new Random();
        int i1 = r.nextInt(max - min + 1) + min;
        //generate random number, set textview the question, set int to usedint array
        textViewQuestions.setText(questionList.get(i1));
        usedInt[0] = i1;

        //set first question

        findViewById(R.id.changeQuestion).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                //Log.d(TAG,questionList[updateQuestions(usedInt)]);
                //final int[] usedIntTemp = usedInt;

                getQuestions();
                int n = updateQuestions(usedInt);
                textViewQuestions.setText(questionList.get(n));
                //finish();
            }
        });
    }

    }

public int updateQuestions(int usedInteger[]) {
        int min = 0;
        int max = i;
        Random r = new Random();
        int i2 = r.nextInt(max - min + 1) + min;
        int uInteger[] = usedInteger;
        int l = 0;

        while (l != max) {
            if (i2 == usedInteger[l]) {
                l++;
                if (l == max) {
                    Toast.makeText(getApplicationContext(), "No other questions available", Toast.LENGTH_LONG).show();

                }
            } else {
                usedInteger[usedInteger.length + 1] = i2;
                return i2;

            }


        }
        return i2;


    }
private void getQuestions()
    {

    class GetQuestions extends AsyncTask<Void, Void, String> {

        //private ProgressBar progressBar;

        @Override
        protected String doInBackground(Void... voids) {
            //creating request handler object
            RequestHandler requestHandler = new RequestHandler();

            //creating request parameters
            HashMap<String, String> params = new HashMap<>();
            params.put("role_id", "1");

            //returing the response
            return requestHandler.sendPostRequest(URLs.URL_QUESTIONS, params);
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            //displaying the progress bar while user registers on the server
            //progressBar = (ProgressBar) findViewById(R.id.progressBar);
            //progressBar.setVisibility(View.VISIBLE);
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            //hiding the progressbar after completion
            //progressBar.setVisibility(View.GONE);
            boolean Error1 = false;
            try {
                //converting response to json object
                JSONObject obj = new JSONObject(s);


                //HashMap<String, String> questionJson = new HashMap<>();


                // success = obj.getBoolean("error");
                if (!obj.getBoolean("error")) {

                    //Toast.makeText(getApplicationContext(), obj.getString("message"), Toast.LENGTH_SHORT).show();

                    //getting the questions from the response
                    JSONArray questionsJson = obj.getJSONArray("questions");

                    //creating a new questions object

                    for (i = 0; i < questionsJson.length(); i++) {
                        JSONObject object = questionsJson.getJSONObject(i);
                        questionList.add(object.getString("question"));
                        Log.d(TAG,"objcheck");
                        Log.d(TAG,object.getString("question"));

                        //q = c.getString("question");
                        //questionJson.put("question", q);
                        //questionList.add(questionJson);
                    }

                    finish();
                    //startActivity(new Intent(getApplicationContext(), MainActivity.class));


                } else {
                    Toast.makeText(getApplicationContext(), "Some error occurred", Toast.LENGTH_SHORT).show();
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }


    }
        GetQuestions gq = new GetQuestions();
        gq.execute();

}

2 个答案:

答案 0 :(得分:0)

    Object[] array = new Object[10];    // say 10 objects
int remain = array.length;
Random rnd = new Random();

public Object next () {
    if (remain == 0) {
        return null;
    } else {
        int i = rnd.nextInt(remain--);
        Object tmp = array[i];
        array[i] = array[remain];
        array[remain] = tmp;
        return tmp;
    }
}

这将产生下一个随机问题

答案 1 :(得分:0)

我尝试过

            getQuestions();
            String n = String.valueOf(next());
            textViewQuestions.setText(n);

我也像这样填充数组

for (i = 0; i < questionsJson.length(); i++) {
                        JSONObject object = questionsJson.getJSONObject(i);
                        array[i] = object.getString("question");
                        questionList.add(object.getString("question"));
                        Log.d(TAG,object.getString("question"));


                    }

但是,问题确实会重复,但是只会显示一定数量的问题。 :(如何使问题不再重复?