Activity wechsel funktioniert nicht!

  • Antworten:1
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 1

09.03.2018, 05:14:13 via Website

Hallo ich bin ein Anfänger und versuche mich in der Programmiersprache.
Ich habe das Problem, dass ich bei Klick eines Arrays auf die nächste Activity wechseln will, wobei mein Emulator immer wieder abstürzt. Ich benötige Hilfe.

beginning of crash
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.onurs.quizduellonur, PID: 2286
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.get(ArrayList.java:411)
at com.example.onurs.quizduellonur.Spiel.FrageAuswertung(Spiel.java:159)
at com.example.onurs.quizduellonur.Spiel.onClick(Spiel.java:112)
at android.view.View.performClick(View.java:5610)
at android.view.View$PerformClick.run(View.java:22265)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
Application terminated.

So sieht der Code aus:

package com.example.onurs.quizduellonur;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.util.ArrayList;

public class Spiel extends AppCompatActivity implements View.OnClickListener{

Button btnAntwortEins, btnAntwortZwei, btnAntwortDrei, btnAntwortVier;
TextView textView;
TextView tvScore;
int aktuelleFrage = 0;
//Endbildschirm? oder sonst was
int Punkte = 0;

//Man kann direkt in der selben Zeile wenn es derselbe Typ ist erstellen und mit "," trennen!
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_spiel);

    btnAntwortEins = (Button) findViewById(R.id.btnAntwortEins);
    btnAntwortZwei = (Button) findViewById(R.id.btnAntwortZwei);
    btnAntwortDrei = (Button) findViewById(R.id.btnAntwortDrei);
    btnAntwortVier = (Button) findViewById(R.id.btnAntwortVier);

    //Hier weiß Java dass es ein TextView gibt und welches!
    textView = (TextView) findViewById(R.id.textView);
    tvScore = (TextView) findViewById(R.id.tvScore);

    btnAntwortEins.setOnClickListener(this);
    btnAntwortZwei.setOnClickListener(this);
    btnAntwortDrei.setOnClickListener(this);
    btnAntwortVier.setOnClickListener(this);
}

@SuppressLint("SetTextI18n")
private void FrageLaden(){
    //Erst Objekt dass wir auf die Fragen zugreifen können, dann eine ArrayList mit den Fragen
    //und dann müssen wir noch einen String Array erstellen um die Fragen zu speichern
    Fragen FragenC = new Fragen();
    ArrayList <String[]> Fragen = FragenC.getFragen();
    String[] Frage = Fragen.get(aktuelleFrage);
    //An welcher Stelle von dem String steht die Frage!
    textView.setText(Frage[0]);
    //Butons und an zufälligen Stellen

    int ZufallsZahl = (int)(Math.random() * (4-1)+1);

    //jetzt kommt ein Algorithmus!
    switch(ZufallsZahl){
        case 1:
            btnAntwortEins.setText(Frage[1]);
            btnAntwortZwei.setText(Frage[2]);
            btnAntwortDrei.setText(Frage[3]);
            btnAntwortVier.setText(Frage[4]);
            //Wenn die Zufallszahl 1 ist, dann kriegt Button Antwort 1, 2 die zwei usw, dann
            //restliche Anordnung aber geändert!
            break;
        case 2:
            btnAntwortEins.setText(Frage[4]);
            btnAntwortZwei.setText(Frage[3]);
            btnAntwortDrei.setText(Frage[1]);
            btnAntwortVier.setText(Frage[2]);
            break;
        case 3:
            btnAntwortEins.setText(Frage[2]);
            btnAntwortZwei.setText(Frage[1]);
            btnAntwortDrei.setText(Frage[4]);
            btnAntwortVier.setText(Frage[3]);
            break;
        case 4:
            btnAntwortEins.setText(Frage[3]);
            btnAntwortZwei.setText(Frage[4]);
            btnAntwortDrei.setText(Frage[2]);
            btnAntwortVier.setText(Frage[1]);
            break;
    }
    //Als wirklich fast allerletztes Punktestand angeben! und dann bei Ende Anzeigen usw.!
    tvScore.setText("Punkte:" + Punkte);
}

@Override
public void onClick(View view) {
    //welcher Button wird angeklickt?


    switch (view.getId()) {
        case R.id.btnAntwortEins:
            //Als letztes was müssen wir alles wissen! und in Klammer wie kommen wir an den Text von btnText
            if(FrageAuswertung(btnAntwortEins.getText().toString())) {
            Punkte++;
        }
        if(aktuelleFrage >=1) {
                //Jetzt geht es um das Ende! von this zu Ende.class!
            Intent intent = new Intent(this, Ende.class);
            intent.putExtra("Punkte", Punkte);
            startActivity(intent);
        }else{
                aktuelleFrage++;
                FrageLaden();
        }
            break;
        //Break sagt die Anweisung ist vorbei sonst geht switch in die n&auml;chsten!
        case R.id.btnAntwortZwei:if(FrageAuswertung(btnAntwortZwei.getText().toString())) {
            Punkte++;
        }
        if(aktuelleFrage >=1) {
            Intent intent = new Intent(this, Ende.class);
            intent.putExtra("Punkte", Punkte);
            startActivity(intent);
        }else{
            aktuelleFrage++;
            FrageLaden();
        }

            break;
        case R.id.btnAntwortDrei:if(FrageAuswertung(btnAntwortDrei.getText().toString())) {
            Punkte++;
        }
        if(aktuelleFrage >=1) {
            Intent intent = new Intent(this, Ende.class);
            intent.putExtra("Punkte", Punkte);
            startActivity(intent);
        }else{
            aktuelleFrage++;
            FrageLaden();
        }
            break;
        case R.id.btnAntwortVier:if
                (FrageAuswertung(btnAntwortVier.getText().toString())) {
            Punkte++;
        }
        if(aktuelleFrage >=1) {
            Intent intent = new Intent(this, Ende.class);
            intent.putExtra("Punkte", Punkte);
            startActivity(intent);
        }else{
            aktuelleFrage++;
            FrageLaden();
        }
            break;
            //Was für tvScore? dafür das folgende!
    }
}

private boolean FrageAuswertung(String btnText){
    boolean Frage = false;
    Fragen FragenC = new Fragen();
    ArrayList Fragen = FragenC.getFragen();
    //Nun haben wir durch ArrayList alle Fragen gespeichert und FragenC ist einfach ein neues Objekt!
    String[] Speicher = (String[]) Fragen.get(aktuelleFrage);
    if(Speicher[1].equals(btnText)){
        Frage = true;
    }
    return Frage;
}

}

Diskutiere mit!
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.173

09.03.2018, 15:50:50 via Website

Hallo Onur,
bevor du dich mit der Android Entwickllung beschäftigst, solltest du die Java Grundlagen leren und grob wissen, was die Fehler bedeuten:

    java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.get(ArrayList.java:411)
at com.example.onurs.quizduellonur.Spiel.FrageAuswertung(Spiel.java:159) 

Dein Fehler liegt im Spiel.java Zeile 159 und rührt daher, dass deine ArrayList wohl leer ist, denn Index=0 und Size=0.

Und irgendwie macht dein OOP wenig Sinn:

  Fragen FragenC = new Fragen(); //Warum "fragen" als Objekt und nicht nur "Frage"
ArrayList <String[]> Fragen = FragenC.getFragen();
String[] Frage = Fragen.get(aktuelleFrage);
//An welcher Stelle von dem String steht die Frage!
textView.setText(Frage[0]);

Du solltest die Frage als eigenes Objekt darstellen, und die Fragen dann als Liste des Objekts.

Zudem hast du uns die Implementierung der Fragen.java nicht mitgeteilt. Ich vermute, dass du dort keine Daten hinterlegst...

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!

Empfohlene Artikel