Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何解决java.lang.IndexOutOfBoundsException:无效索引24,大小为21_Java_Android - Fatal编程技术网

如何解决java.lang.IndexOutOfBoundsException:无效索引24,大小为21

如何解决java.lang.IndexOutOfBoundsException:无效索引24,大小为21,java,android,Java,Android,当我将超过21个问题添加到我的问题应用程序并尝试运行它时,会出现以下错误: 12-13 13:18:12.384 21277-21277/com.example.chaitanya.myquiz E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.chaitanya.myquiz, PID: 21277 java.lang.IndexOutOfBoundsException: Invalid index 24, size is

当我将超过21个问题添加到我的问题应用程序并尝试运行它时,会出现以下错误:

12-13 13:18:12.384 21277-21277/com.example.chaitanya.myquiz E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.chaitanya.myquiz, PID: 21277
java.lang.IndexOutOfBoundsException: Invalid index 24, size is 21
 at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
 at java.util.ArrayList.get(ArrayList.java:308)
 at com.example.chaitanya.myquiz.QuestionActivity.getAnswer(QuestionActivity.java:121)
 at com.example.chaitanya.myquiz.QuestionActivity$3.onClick(QuestionActivity.java:90)
 at android.view.View.performClick(View.java:4759)
 at android.view.View$PerformClick.run(View.java:19770)
 at android.os.Handler.handleCallback(Handler.java:739)
 at android.os.Handler.dispatchMessage(Handler.java:95)
 at android.os.Looper.loop(Looper.java:135)
 at android.app.ActivityThread.main(ActivityThread.java:5237)
 at java.lang.reflect.Method.invoke(Native Method)
 at java.lang.reflect.Method.invoke(Method.java:372)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:707)
以下是java文件的摘录,我在其中存储了发生错误的问题:

//There are 30 question in the database
public List<Question> getAllQuestions() {
List<Question> quesList = new ArrayList<Question>();
// Select All Query
String selectQuery = "SELECT  * FROM " + TABLE_QUEST;
dbase = this.getReadableDatabase();
Cursor cursor = dbase.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
    do {
        Question quest = new Question();
        quest.setID(cursor.getInt(0));
        quest.setQUESTION(cursor.getString(1));
        quest.setANSWER(cursor.getString(2));
        quest.setOPTA(cursor.getString(3));
        quest.setOPTB(cursor.getString(4));
        quest.setOPTC(cursor.getString(5));
        quesList.add(quest);
    } while (cursor.moveToNext());
}
// return quest list
return quesList;
}
//数据库中有30个问题
公共列表getAllQuestions(){
List quesList=new ArrayList();
//选择所有查询
String selectQuery=“SELECT*FROM”+表格任务;
dbase=this.getReadableDatabase();
Cursor Cursor=dbase.rawQuery(selectQuery,null);
//循环遍历所有行并添加到列表
if(cursor.moveToFirst()){
做{
问题探索=新问题();
setID(cursor.getInt(0));
setquest.setQUESTION(cursor.getString(1));
setANSWER(cursor.getString(2));
setOPTA(cursor.getString(3));
setOPTB(cursor.getString(4));
setOPTC(cursor.getString(5));
添加(任务);
}while(cursor.moveToNext());
}
//返回任务列表
返回任务列表;
}
下面是QuestionActivity类,在我的问题代码中使用:

//QuestionActivity class
import java.util.List;
import java.util.Random;
import java.util.Timer;
import java.util.concurrent.TimeUnit;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Typeface;
import android.media.MediaPlayer;
import android.os.Build;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class QuestionActivity extends Activity {
    List<Question> quesList;
    int score = 0;
    Random r = new Random();
    int qid =0;

    Question currentQ;
    TextView txtQuestion, times, scored;
    Button button1, button2, button3;
    CounterClass timer;


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

    QuizHelper db = new QuizHelper(this);  // my question bank class
    quesList = db.getAllQuestions();  // this will fetch all Q  
    currentQ = quesList.get(qid); // the current question

    txtQuestion = (TextView) findViewById(R.id.txtQuestion);
    // the textview in which the question will be displayed

    // the three buttons,
    button1 = (Button) findViewById(R.id.button1);
    button2 = (Button) findViewById(R.id.button2);
    button3 = (Button) findViewById(R.id.button3);

    // the textview in which score will be displayed
    scored = (TextView) findViewById(R.id.score);

    // the timer
    times = (TextView) findViewById(R.id.timers);

    // method which will set the things up for our game
    setQuestionView();
    times.setText("00:00:30");
    timer = new CounterClass(30000, 1000);
    timer.start();

    // button click listeners
    button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // passing the button text to other method
            // to check whether the anser is correct or not
            // same for all three buttons
            getAnswer(button1.getText().toString());
        }
    });

    button2.setOnClickListener(new View.OnClickListener() {
        @Override
            public void onClick(View v) {
            getAnswer(button2.getText().toString());
        }
    });

    button3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            getAnswer(button3.getText().toString());
        }
    });
}

public void getAnswer(String AnswerString) {
    if (currentQ.getANSWER().equals(AnswerString)) {
        // if conditions matches increase the int (score) by 1
        // and set the text of the score view
        score++;
        scored.setText("Score : "+ score);
    } else {
        // if unlucky start activity and finish the game
        timer.cancel();
        Intent intent = new Intent(QuestionActivity.this,
                ResultActivity.class);

        // passing the int value
        Bundle b = new Bundle();
        b.putInt("score", score); // Your score
        intent.putExtras(b); // Put your score to your next
        startActivity(intent);
        finish();
    }
    if (qid < 31) {
        // if questions are not over then do this
        currentQ = quesList.get(qid);
        setQuestionView();
    } else {
        // if over do this
        Intent intent = new Intent(QuestionActivity.this,
                ResultActivity.class);
        Bundle b = new Bundle();
        b.putInt("score", score); // Your score
        intent.putExtras(b); // Put your score to your next
        startActivity(intent);
        finish();
    }
}

@TargetApi(Build.VERSION_CODES.GINGERBREAD)
@SuppressLint("NewApi")
public class CounterClass extends CountDownTimer {
    public CounterClass(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
        // TODO Auto-generated constructor stub
    }
    @Override
    public void onFinish() {
        times.setText("Time is up");
        Intent intent = new Intent(QuestionActivity.this,
                ResultActivity.class);
        Bundle b = new Bundle();
        b.putInt("score", score); // Your score
        intent.putExtras(b); // Put your score to your next
        startActivity(intent);
        finish();
    }
    @Override
        public void onTick(long millisUntilFinished) {
        // TODO Auto-generated method stub

        long millis = millisUntilFinished;
        String hms = String.format(
                "%02d:%02d:%02d",
                TimeUnit.MILLISECONDS.toHours(millis),
                TimeUnit.MILLISECONDS.toMinutes(millis)
                        - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS
                        .toHours(millis)),
                TimeUnit.MILLISECONDS.toSeconds(millis)
                        -TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS
                        .toMinutes(millis)));
        System.out.println(hms);
        times.setText(hms);
    }
}
private void setQuestionView() {
    // the method which will put all things together
    txtQuestion.setText(currentQ.getQUESTION());
    button1.setText(currentQ.getOPTA());
    button2.setText(currentQ.getOPTB());
    button3.setText(currentQ.getOPTC());
    qid= (r.nextInt(30) + 20);
}
//QuestionActivity类
导入java.util.List;
导入java.util.Random;
导入java.util.Timer;
导入java.util.concurrent.TimeUnit;
导入android.annotation.SuppressLint;
导入android.annotation.TargetApi;
导入android.app.Activity;
导入android.content.Intent;
导入android.graphics.Typeface;
导入android.media.MediaPlayer;
导入android.os.Build;
导入android.os.Bundle;
导入android.os.CountDownTimer;
导入android.util.Log;
导入android.view.view;
导入android.widget.Button;
导入android.widget.TextView;
公共类活动扩展了活动{
清单问题清单;
智力得分=0;
随机r=新随机();
int-qid=0;
问题Q;
text查看txtQuestion,次数,得分;
按钮1、按钮2、按钮3;
反质量定时器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
QuizHelper db=newquizhelper(this);//我的问题库类
quesList=db.getAllQuestions();//这将获取所有Q
currentQ=quesList.get(qid);//当前问题
txtQuestion=(TextView)findViewById(R.id.txtQuestion);
//显示问题的文本视图
//三个按钮,
button1=(按钮)findViewById(R.id.button1);
button2=(按钮)findViewById(R.id.button2);
button3=(按钮)findViewById(R.id.button3);
//显示分数的文本视图
得分=(TextView)findViewById(R.id.score);
//计时器
times=(TextView)findViewById(R.id.timers);
//为我们的游戏做准备的方法
setQuestionView();
times.setText(“00:00:30”);
定时器=新的反过程(300001000);
timer.start();
//按钮单击侦听器
button1.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//将按钮文本传递给其他方法
//以检查anser是否正确
//所有三个按钮都相同
getAnswer(button1.getText().toString());
}
});
button2.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
getAnswer(button2.getText().toString());
}
});
button3.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
getAnswer(按钮3.getText().toString());
}
});
}
public void getAnswer(字符串AnswerString){
if(currentQ.getANSWER().equals(AnswerString)){
//如果条件匹配,则将整数(分数)增加1
//并设置分数视图的文本
分数++;
scored.setText(“分数:+分数”);
}否则{
//如果运气不好,开始活动并完成游戏
timer.cancel();
意向意向=新意向(QuestionActivity.this,
结果类);
//传递int值
Bundle b=新Bundle();
b、 putInt(“分数”,分数);//你的分数
意图。额外加分(b);//把你的分数记到下一个分数上
星触觉(意向);
完成();
}
如果(qid<31){
//如果问题还没有结束,那么就这样做
currentQ=quesList.get(qid);
setQuestionView();
}否则{
//如果过了头,就这样做
意向意向=新意向(QuestionActivity.this,
结果类);
Bundle b=新Bundle();
b、 putInt(“分数”,分数);//你的分数
意图。额外加分(b);//把你的分数记到下一个分数上
星触觉(意向);
完成();
}
}
@TargetApi(构建版本代码姜饼)
@SuppressLint(“新API”)
公共类反类扩展倒计时{
公共反汇编(长百万未来,长倒计时间隔){
超级(毫秒未来,倒计时间隔);
//TODO自动生成的构造函数存根
}
@凌驾
公共无效onFinish(){
times.setText(“时间到了”);
意向意向=新意向(QuestionActivity.this,
结果类);
Bundle b=新Bundle();
b、 putInt(“分数”,分数);//你的分数
意图。额外加分(b);//把你的分数记到下一个分数上
星触觉(意向);
完成();
}
@凌驾
公共void onTick(长毫秒未完成){
//TODO自动生成的方法存根
长密耳=完成的密耳;
String hms=String.format(
“%02d:%02d:%02d”,
时间单位。毫秒。至小时(毫秒),
时间单位.毫秒.t分钟(毫秒)
-TimeUnit.HOURS.toMinutes(TimeUnit.ms
.To小时(毫秒)),
时间单位。毫
java.lang.IndexOutOfBoundsException: Invalid index 24, size is 21
int i= Integer.parseInt(button1.getText().toString());
 if(getAnswer.size()>i){

     getAnswer(i);
 }