微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我的应用程序从后台调用它时显示 ArrayIndexOutOfBoundsException

如何解决我的应用程序从后台调用它时显示 ArrayIndexOutOfBoundsException

我正在尝试编写一个测验应用程序。我的应用程序在后台运行后立即崩溃,然后再次打开它。我得到一个 Arrayindexoutofboundsexception。不幸的是,虽然我可以在 Logcat 中看到该行,但我看不到错误。我创建了一个仅包含问题的额外课程。显然错误出现在这里

public class Fragen {

    public String[] mQuestions ={
            "Womit beschäftigt sich die Logistik?",//1
            "Wie viele Betriebsversammlungen vom Betriebsrat sind gesetzlich pro Jahr festgelegt?",//2
            "Nenne die Kernelemente,die zur Anwendung in der Logistik notwendig sind",//3
            "Was versteht man unter der externen Logistik?",//4
            "Was versteht man unter der internen Logistik?",//5
            "Ein Großunternehmen-Zulieferer fertigt Vorleistungen in Asien für einen in Deutschland liegenden Automobilhersteller,welche Nachteile könnten hierbei entstehen?",//6
            "Herr Meier ist in der Beschaffung von Gütern tätig und hat sich gefragt ob per Telefon Verträge zustande kommen können oder ob diese immer schriftlich erfolgen müssen?",//7
            "Frau Petersen,die bei einem deiner Lieferanten (Stark-Schrauben AG) im Verkauf arbeitet macht dir ein schriftliches Angebot von 2000 Schrauben. Diese erfüllen allerdings nicht deinen Kriterien und du reagierst auch nicht auf dieses Angebot. Ist hierbei ein Vertrag zustande gekommen?",//8
            "Die Beschaffungsstrategien zeichnen viele Merkmale aus,nenne drei davon",//9
            "Aufgrund nicht erlaubter Wettbewerbsabsprachen hat das Bundeskartellamt gegen drei Großhändler und mehreren Verantwortlichen Bußgelder von insgesamt 3 Millionen Euro verhängt. Der Gesetzgeber regelt in den Bestimmungen,ob und wann Unternehmenszusammenschlüsse zulässig sind. Nenne zwei Nachteile für die Volkswirtschaft,die aus Unternehmenszusammenschlüsse entstehen?"//10

    };

    private String mChoices [] [] ={

            {"Bestimmte Güter in der bestimmten Menge sowie Qualität zur Verfügung zu stellen","Das Programmieren bestimmter Software","Das aussortieren von Verpackungen","Die Montage von Betriebsmaschinen"},//1
            {"2","5","4","1"},//2
            {"Einkauf,Kundenbetreuung","Risikomanagement,Bilanzierung","Planung,Koordination","Montage,Beratung"},//3
            {"Umstellungen innerhalb des Unternehmens","Der Weg vom Lieferanten zum Unternehmen,anschließend zum Kunden","Mitarbeiterbeschaffung","Umlagerung von Gütern in Fremdfirmen"},//4
            {"Austausch von Gütern innerhalb betrieblicher Bereiche","Gütertransport zum Kunden","Qualitätskontrollen","Kundengewinnung"},//5
            {"Höhere kosten","schwierige Kommunikation,da kein Englisch gesprochen wird","Keine Reklamationen möglich","Fehlende Flexibilität und Umweltbelastung aufgrund der Entfernung"},//6
            {"Verträge müssen immer schriftlich erfolgen","Dies ist nur teilweise möglich,nach dem Telefonat muss Herr Meier eine kurze Email des Antrags schreiben","Ja,es genügt eine Willenserklärung abzugeben z.B. am Telefon","Verträge können nur mündlich abgegeben werden"},//7
            {"Gemäß §147 Abs.2 BGB muss die Annahme in diesem Fall schriftlich erfolgen,ein Vertrag ist nicht zustande gekommen",du hättest innerhalb der Widerrufsfrist reagieren müssen","Ja ein Vertrag ist zustande gekommen,allerdings hat man ein Recht auf Preissenkung",laut §15 Abs.9 BGB ist hier ein bindender Vertrag zustande gekommen"},//8
            {"Billige Arbeitskräfte finden,Softwarebeschaffung,Organisation der Betriebsmittel","Einkaufspreise reduzieren,neue Lieferanten suchen,Abhängigkeit reduzieren durch Puffer","so viele Lieferanten wie möglich finden,Lieferantenketten pflegen,Arbeitsmittel in regelmäßigen Abständen erneuern","Betriebsmittel zur verfügung stellen,Lagerbestände immer auslaufen lassen,möglichst wenig Kapital bei der Beschaffung verwenden"},//9
            {"Gefahr für überhöhte Preise,Die Vielfalt des Güterangebotes verringt sich","Die Preise fallen stark,Arbeitsplätze sind in Gefahr","Es werden keine Handelsabkommen mehr geschlossen,Zollgebühren steigen enorm an","Eine Inflation könnte herbeigerufen werden,Die Wirtschaft erlebt ein ständiges auf und ab"}//10
            
    };

    private String mCorrectAnswers [] = {
            "Bestimmte Güter in der bestimmten Menge sowie Qualität zur Verfügung zu stellen",//1
            "4",//2
            "Planung,//3
            "Vom Lieferanten zum Unternehmen,//4
            "Austausch von Gütern innerhalb betrieblicher Bereiche",//5
            "Fehlende Flexibilität und Umweltbelastung aufgrund der Entfernung",//6
            "Ja,//7
            "Gemäß §147 Abs.2 BGB muss die Annahme in diesem Fall schriftlich erfolgen,//8
            "Einkaufspreise reduzieren,//9
            "Gefahr für überhöhte Preise,Die Vielfalt des Güterangebotes verringt sich" //10
           } ;

    public String getQuestions (int a){
        String question = mQuestions[a];

        return question;
    }

    public String getChoice1 (int a) {
        String choice = mChoices [a][0];
        return  choice;

    }
    public String getChoice2 (int a) {
        String choice = mChoices [a][1];
        return  choice;

    }
    public String getChoice3 (int a) {
        String choice = mChoices [a][2];
        return  choice;

    }
    public String getChoice4 (int a) {
        String choice = mChoices [a][3];
        return  choice;

    }
    public String getCorrechtAnswer (int a){
            String answer = mCorrectAnswers [a];
            return answer;

    }
}

这是 Logcat

2021-01-18 19:45:50.060 23813-23813/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.logistikmeisterprfungsvorbereitung,PID: 23813
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.logistikmeisterprfungsvorbereitung/com.example.logistikmeisterprfungsvorbereitung.MainActivity}: java.lang.Arrayindexoutofboundsexception: length=1; index=1
    at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:3308)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3457)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2044)
    at android.os.Handler.dispatchMessage(Handler.java:107)
    at android.os.Looper.loop(Looper.java:224)
    at android.app.ActivityThread.main(ActivityThread.java:7562)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
 Caused by: java.lang.Arrayindexoutofboundsexception: length=1; index=1
    at com.example.logistikmeisterprfungsvorbereitung.Fragen.getChoice2(Fragen.java:493)
    at com.example.logistikmeisterprfungsvorbereitung.MainActivity.updateQuestion(MainActivity.java:154)
    at com.example.logistikmeisterprfungsvorbereitung.MainActivity.onCreate(MainActivity.java:65)
    at android.app.Activity.performCreate(Activity.java:7893)
    at android.app.Activity.performCreate(Activity.java:7880)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
    at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:3283)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3457) 
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2044) 
    at android.os.Handler.dispatchMessage(Handler.java:107) 
    at android.os.Looper.loop(Looper.java:224) 
    at android.app.ActivityThread.main(ActivityThread.java:7562) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950) 

Logcat 显示这部分代码抛出了 Arrayindexoutofboundsexception

public String getChoice2 (int a) {
    String choice = mChoices [a][1];
    return  choice;
}

但是我找不到错误?我也可以显示我的 MainActivity.java


public class MainActivity extends AppCompatActivity {

    Button antwort1,antwort2,antwort3,antwort4,hauptmenu;
    TextView frage;
    TextView punkte;
    ImageView coin;
    Animation rotateanimation;

    private Fragen mQuestions = new Fragen();
    private String mAnswers;
    private int mscore = 0;
    private int mQusetionsLenght = mQuestions.mQuestions.length;
    MediaPlayer richtig_sound,falschsound;
    AlertDialog alertDialogBuilder;
    Random r;

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

        hauptmenu = (Button)findViewById(R.id.hauptmenu);
        hauptmenu.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent_hauptmenu = new Intent(getApplicationContext(),Begrusung.class);
                startActivity(intent_hauptmenu);
                finish();
            }
        });


        r = new Random();
        richtig_sound = MediaPlayer.create(this,R.raw.richtig_sound);
        falschsound = MediaPlayer.create(this,R.raw.falsch_sound);
        

        antwort1 = (Button)findViewById(R.id.antwort1);
        antwort2 = (Button)findViewById(R.id.antwort2);
        antwort3 = (Button)findViewById(R.id.antwort3);
        antwort4 = (Button)findViewById(R.id.antwort4);

        frage = (TextView)findViewById(R.id.frage);
        punkte = (TextView)findViewById(R.id.punkte);
        punkte.setText("Punkte: " + mscore);
        updateQuestion(r.nextInt(mQusetionsLenght));

        coin = (ImageView)findViewById(R.id.coin);


        antwort1.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if (antwort1.getText() == mAnswers){
                    mscore ++;
                    richtig_sound.start();
                    rotateanimationMethode ();

                    punkte.setText("Punkte: " + mscore);
                    updateQuestion(r.nextInt(mQusetionsLenght));

                }else {
                    falschsound.start();
                   
                    custom_alert();
                }
            }
        });

        antwort2.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (antwort2.getText() == mAnswers){
                    mscore ++;
                    richtig_sound.start();
                    rotateanimationMethode ();

                    punkte.setText("Punkte: " + mscore);
                    updateQuestion(r.nextInt(mQusetionsLenght));

                }else {
                    falschsound.start();
                    
                    custom_alert();
                }
            }
        });

        antwort3.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (antwort3.getText() == mAnswers){
                    mscore ++;
                    richtig_sound.start();
                    rotateanimationMethode ();

                    punkte.setText("Punkte: " + mscore);
                    updateQuestion(r.nextInt(mQusetionsLenght));

                }else {
                    falschsound.start();
                    custom_alert();
                }
            }
        });

        antwort4.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (antwort4.getText() == mAnswers){
                    mscore ++;
                    richtig_sound.start();
                    rotateanimationMethode ();

                    punkte.setText("Punkte: " + mscore);
                    updateQuestion(r.nextInt(mQusetionsLenght));

                }else {
                    falschsound.start();
                    custom_alert();
                }
            }
        });


    }

    private void updateQuestion (int num){
        frage.setText(mQuestions.getQuestions(num));
        antwort1.setText(mQuestions.getChoice1(num));
        antwort2.setText(mQuestions.getChoice2(num));
        antwort3.setText(mQuestions.getChoice3(num));
        antwort4.setText(mQuestions.getChoice4(num));

        mAnswers = mQuestions.getCorrechtAnswer(num);
    }



    private void custom_alert () {

        LayoutInflater inflater = LayoutInflater.from(this);
        View view = inflater.inflate(R.layout.custom_alert_dialog,null);
        Button neues_spiel = view.findViewById(R.id.neues_spiel);
        Button beenden = view.findViewById(R.id.beenden);
        TextView alert_text = view.findViewById(R.id.alerttext);
        alert_text.setText("Das Spiel ist zu Ende,deine Punktzahl: " + mscore +"\n" + "Die richtige Antwort war:" +"\n"+"\n"+ mAnswers + "\n" + "\n"+ "Du kannst bei der letzten Frage weitermachen,indem du außerhalb dieser Box an irgendeiner Stelle klickst");
        neues_spiel.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(getApplicationContext(),MainActivity.class));
            }
        });
        beenden.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent2 = new Intent(getApplicationContext(),Begrusung.class );
                startActivity(intent2);

                finish();

            }
        });

        alertDialogBuilder = new AlertDialog.Builder(MainActivity.this).setView(view)
                .create();
        alertDialogBuilder.show();

    }

    private void rotateanimationMethode () {

        rotateanimation = AnimationUtils.loadAnimation(this,R.anim.rotate);
        coin.startAnimation(rotateanimation);

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (alertDialogBuilder!=null && alertDialogBuilder.isShowing() ){
            alertDialogBuilder.cancel();}
    }

    @Override
    protected void onStop() {
        super.onStop();
        richtig_sound.stop();
        richtig_sound.release();
        falschsound.stop();
        falschsound.release();
    }
}

解决方法

以下方法将返回 0-10 范围内的值:

updateQuestion(r.nextInt(mQusetionsLenght));

所以你必须使用以下格式:

updateQuestion(r.nextInt(mQusetionsLenght - 1));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?