Android 使用volley库解析JSON数据时出现问题

Android 使用volley库解析JSON数据时出现问题,android,android-studio,methods,android-asynctask,synchronization,Android,Android Studio,Methods,Android Asynctask,Synchronization,这是一个从internet获取JSON数据的简单程序answerWithAsyncTask()是一个界面,可确保所有下载的数据仅在下载完成时添加到questionArrayList 错误:java.lang.IndexOutOfBoundsException:索引:1,大小:0 private List<Question> questionList; protected void onCreate(Bundle savedInstanceState) {

这是一个从internet获取JSON数据的简单程序answerWithAsyncTask()是一个界面,可确保所有下载的数据仅在下载完成时添加到questionArrayList

错误:java.lang.IndexOutOfBoundsException:索引:1,大小:0

 private List<Question> questionList;
 protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

//Few findViewbyId's here. Ignoring them

        questionList = new QuestionBank().getQuestions(new answerWithAsyncTask() {
            @Override
            public void asyncMe(ArrayList<Question> questionArrayList) {

                questionTextview.setText(questionArrayList.get(currentQuestionIndex).getQuestionId());
            }
        });
                 updateQuestion();     //This is the newly added line
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.prev_button:
                updateQuestion();
                break;
        }
    }
    private void updateQuestion() {
        String question = questionList.get(1).getQuestionId();
        questionTextview.setText(question);
    }
私人列表问题列表;
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//很少有人在这里,忽略他们
questionList=new QuestionBank().getQuestions(使用AsyncTask()创建新答案){
@凌驾
公共无效异步列表(ArrayList questionArrayList){
questionTextview.setText(questionArrayList.get(currentQuestionIndex.getQuestionId());
}
});
updateQuestion();//这是新添加的行
}
@凌驾
公共void onClick(视图v){
开关(v.getId()){
案例R.id.prev_按钮:
updateQuestion();
打破
}
}
私有void updateQuestion(){
String question=questionList.get(1.getQuestionId();
questionTextview.setText(问题);
}
更新这是我的获取问题方法

String url ="https://raw.githubusercontent.com/curiousily/simple-quiz/master/script/statements-data.json";
    private ArrayList<Question> questionArrayList= new ArrayList<>();

    public List<Question> getQuestions (final answerWithAsyncTask callback){
        JsonArrayRequest jsonArrayRequest =new JsonArrayRequest(Request.Method.GET, url, (String) null,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        for(int i=0;i<response.length();i++){
                            Question question = new Question();
                            try {
                                question.setQuestionId(response.getJSONArray(i).getString(0));
                                question.setTorF(response.getJSONArray(i).getBoolean(1));
                                questionArrayList.add(question);
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                        if(null != callback) callback.asyncMe(questionArrayList);
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                    }
                });
        AppController.getInstance().addToRequestQueue(jsonArrayRequest);
        return questionArrayList;
    }
stringurl=”https://raw.githubusercontent.com/curiousily/simple-quiz/master/script/statements-data.json";
private ArrayList questionArrayList=新建ArrayList();
公共列表getQuestions(异步任务回调的最终答案){
JsonArrayRequest JsonArrayRequest=新的JsonArrayRequest(Request.Method.GET,url,(String)null,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONArray响应){

对于(int i=0;i您得到此错误是因为

 private List<Question> questionList;
没有将数据返回到问题列表。在这里,您正在尝试执行接口回调,为了正确实现它,请查看此答案并相应地更改代码,
您收到此错误是因为

 private List<Question> questionList;
没有将数据返回到问题列表。在这里,您正在尝试执行接口回调,为了正确实现它,请查看此答案并相应地更改代码,

在方法updateQuestion()中,将-get(1)更改为get(0)。然后告诉我它是否有效?不,它不起作用。实际上,通过JSON数组解析的数据数量超过900。因此,它应该显示一个值,而不考虑0或1。例如,在第一种情况下,如果改为写入
get(50)
它仍然会相应地向我显示数据。但在第二种情况下,任何值都会导致错误。索引:1,大小:0表示ArrayList的大小为0。在尝试访问其元素的行中,您应该首先通过日志记录检查其大小。实际上,我已经提取了剩余的代码。Volley是异步的,这意味着它是我会在数据从internet下载之前显示数据,这就是为什么我在这里使用answerWithAsyncTAsk()内部接口来维护一种委托类型(仅在完全接收时显示数据)。在方法updateRequestion()中,将-get(1)更改为get(0)。然后告诉我它是否工作?不,它不工作。实际上,通过JSON数组解析的数据数量超过900。因此,它应该显示一个值,而不考虑0或1。例如,在第一种情况下,如果改为写入
get(50)
它仍然会相应地向我显示数据。但在第二种情况下,任何值都会导致错误。索引:1,大小:0表示ArrayList的大小为0。在尝试访问其元素的行中,您应该首先通过日志记录检查其大小。实际上,我已经提取了剩余的代码。Volley是异步的,这意味着它是我会在数据从internet下载之前显示数据,这就是为什么我使用answerWithAsyncTAsk()内部接口来维护这里的委托类型(仅在完全接收时显示数据)。
 return questionArrayList;