Beiträge von Koter

    Hallo,


    zunächst mal vielen Dank für deine Hilfe.


    Weil ich allerdings schon 3 Tage meiner "Programmier Zeit" da reingesteckt habe, habe ich es aufgegeben, zumal genau der selbe Code in einer anderen Anwendung funktioniert.
    Es ist mir also nicht klar, wieso er in dieser Anwendung nicht funktioniert. Einmal komplett neu die Anwendung aufgesetzt und es funktioniert.


    Ich habe das jetzt so gemacht, weil ich gerne andere Sachen programmieren will und nicht immer am selben "Projekt" hängen und Fehler suchen, die gar nicht da sind.


    Ich habe die Zeile in die playAgain Methode, damit ich das Spiel wenigstens testen konnte.


    Danke nochmals für deine Hilfe!

    Hi erstens gehört die findviewbyid in die onCreate und nicht in die playagain Methode.
    Auch den Mediaplayer solltest du in der onCreate inizalisiren und nicht im Klassenrumpf. Da solte man nur primitive datentypen zuweisen. Wenn du mal eine zweite activity einbindest wistu Probleme damit haben. Mache es gleich richtig.
    Kennst du dich mit dem Debugger aus denn damit kannst du herausfinden wo bei welcher Zeile deine app abstürzt.


    Gehe ich richtig auf in der Annahme das die app beim ersten Durchlauf richtig funktioniert?

    Salli,


    packe ich diesen Befehl in die onCreate Methode stürzt die App bei Appstart ab:


    spielfeldLayout = (GridLayout)findViewById(R.id.spielfeldLayout);


    also habe ich diesen Befehl in der playAgain Methode gelassen.


    Jetzt führe ich die App wieder aus und spiele bis zu dem Zeitpunk, dass man auf nochmal spielen drücken muss.


    Debugger Konsole spuckt zum Zeitpunkt an dem der "playAgainButton" betätigt wird aus:


    E/AndroidRuntime: FATAL EXCEPTION: main
    Process: **************, PID: 8276java.lang.IllegalStateException: Could not execute method for android:onClick
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
    at android.view.View.performClick(View.java:6256)at android.view.View$PerformClick.run(View.java:24701)
    at android.os.Handler.handleCallback(Handler.java:789)at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6541)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
    Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method)
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
    at android.view.View.performClick(View.java:6256)
    at android.view.View$PerformClick.run(View.java:24701)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6541)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
    Caused by: java.lang.ClassCastException: android.support.v7.widget.GridLayout cannot be cast to android.widget.GridLayoutat games.*******.tictactoe.TicTacToe_Code.playAgain(TicTacToe_Code.java:153)
    at java.lang.reflect.Method.invoke(Native Method)
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
    at android.view.View.performClick(View.java:6256) at android.view.View$PerformClick.run(View.java:24701)
    at android.os.Handler.handleCallback(Handler.java:789) at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6541)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
    Disconnected from the target VM, address: 'localhost:8607', transport: 'socket'


    Ja Die App läuft einwandfrei, bis zum Aufrufen der playAgain Methode über den "playAgainButton". ;(

    Moin moin,


    ich habe das GrinLayout jetzt in der public class initialisiert.


    GridLayout spielfeldLayout;


    Die App startet einwandfrei.


    Dementsprechend lautet der Befehl in der playAgain Methode jetzt:


    spielfeldLayout = (GridLayout)findViewById(R.id.spielfeldLayout);


    Allerdings ist hier das (GridLayout) ausgegraut und die App stürzt nach wie vor ab, wenn ich nochmal spielen möchte.


    Habe ich das auch so umgesetzt wie es deine Lösung vorgibt? Evtl. habe ich ja etwas falsch verstanden?


    Die angelegten Variablen in der public class:


    public class TicTacToe_Code extends AppCompatActivity {
    //Button onClick Methode Start
    Button startbutton;
    //Musik
    Button music;
    boolean hintergrundmusik;
    MediaPlayer hintergrundmusik1 = new MediaPlayer();
    //Spiel, 0: Chinese, 1: Marcel Davis, 2: leer
    int spieler = 0;
    int[] status = {2,2,2,2,2,2,2,2,2};
    int[][] siegesbedingungen = {{0,1,2},{3,4,5},{6,7,8},{0,3,6},{1,4,7},{2,5,8},{0,4,8},{2,4,6}};
    boolean spielAktiv = true;
    Button playAgainButton;
    TextView winnerTextView;
    GridLayout spielfeldLayout;


    Die komplette playAgain Methode:


    //Erneut spielen


    public void playAgain (View view){


    playAgainButton.setVisibility(View.INVISIBLE);
    winnerTextView.setVisibility(View.INVISIBLE);


    spielfeldLayout = (GridLayout)findViewById(R.id.spielfeldLayout);


    for (int i = 0; i < spielfeldLayout.getChildCount(); i++){


    ImageView counter = (ImageView) spielfeldLayout.getChildAt(i);


    counter.setImageDrawable(null);


    }


    for (int i = 0; i<status.length; i++){
    status[i] = 2;
    }


    spieler = 0;
    spielAktiv = true;


    }


    Ich weiß echt nicht weiter, alles andere funktoniert.

    Hi ich noch mal zeige mal dein Gradle File. Hast du überhaupt die supportlib
    com.android.support:gridlayout-v7:27.1.1 mit eingebunden?

    Hallo jogimuc,


    hier mein build.gradle:


    apply plugin: 'com.android.application'


    android {
    compileSdkVersion 28
    defaultConfig {
    applicationId "games.schellej.tictactoe"
    minSdkVersion 26
    targetSdkVersion 28
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
    release {
    minifyEnabled false
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    }
    }


    dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0-alpha1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation 'com.android.support:gridlayout-v7:28.0.0-alpha1'


    Als letzter Punkt ist die implementation vorhanden.

    wie sieht den das layout aus? Ist R.id.spielfeldLayout auch in dem aktuell geladenen layout vorhanden und vor allen ist das auch ein Gridlayout.

    Hier das GridLayout in der Activity_Main:


    <android.support.v7.widget.GridLayout
    android:id="@+id/spielfeldLayout"
    android:layout_width="368dp"
    android:layout_height="368dp"
    android:layout_marginBottom="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:background="@drawable/spielfeldfertig"
    app:columnCount="3"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:rowCount="3">

    Die playAgain Methode befindet sich in der public class TicTacToe_Code extends AppCompatActivity {}


    Ich habe nur diese Klasse, dort befindet sich der komplette Code.

    vielen Dank für deine schnelle Hilfe, aber es wird ausgegraut.


    Was meinst du damit?

    Der derzeitige Befehl um das GridLayout zu initialisieren in meiner playAgain Methode:


    GridLayout spielfeldLayout = findViewById(R.id.spielfeldLayout);


    Dein Vorschlag es als GridLayout zu definieren:


    GridLayout spielfeldLayout = (GridLayout)findViewById(R.id.spielfeldLayout);


    (GridLayout) wird ausgegraut.


    Ich weiß es ist ein harter Brocken und ich bin dich echt dankbar für deine Hilfe! (zumindest für mich ist es ein harter Brocken)

    Caste es mal zu einem GridLayout.


    GridLayout spielfeldLayout = ( GridLayout) findViewById(R.id.spielfeldLayout);

    Hallo jogimuc,


    vielen Dank für deine schnelle Hilfe, aber es wird ausgegraut.


    App stürzt nach wie vor ab.


    Ich muss es irgendwie hinbekommen, die ImageViews innerhalb des GridLayouts zu leeren,


    ohne den Befehl:


    GridLayout spielfeldLayout = findViewById(R.id.spielfeldLayout);


    ebenso habe ich schon versucht das GridLayout in der public class zu erstelln, doch dann stürzt die App sofort beim Starten ab, so sah das ganze dann aus:


    GridLayout spielfeldLayout;


    und dann wurde das GridLayout folgendermaßen in der playAgain Methode initialisiert:


    spielfeldLayout = findViewById(R.id.spielfeldLayout);


    wobei der Absturz auf diese Zeile zurückzuführen ist:


    GridLayout spielfeldLayout;


    Das hier steht im Logcat:


    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:389)
    at android.view.View.performClick(View.java:6256)
    at android.view.View$PerformClick.run(View.java:24701)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164)

    Hallo, ich habe folgendes Problem, ich habe eine Tic Tac Toe App gebastelt, die auch soweit funktioniert. Wenn ich allerdings über den "Nochmal Spielen" Button die playAgain Methode aufrufe, stürtzt meine App ab.
    Das Abstürzen kann ich auf folgenden Befehl zurückführen:


    GridLayout spielfeldLayout = findViewById(R.id.spielfeldLayout);


    Die komplette playAgain Methode:


    //Erneut spielen


    public void playAgain (View view){


    playAgainButton.setVisibility(View.INVISIBLE);
    winnerTextView.setVisibility(View.INVISIBLE);


    GridLayout spielfeldLayout = findViewById(R.id.spielfeldLayout);


    for (int i = 0; i < spielfeldLayout.getChildCount(); i++){


    ImageView counter = (ImageView) spielfeldLayout.getChildAt(i);


    counter.setImageDrawable(null);


    }
    for (int i = 0; i<status.length; i++){
    status[i] = 2;
    }
    spieler = 0;
    spielAktiv = true;
    }


    Zurückgesetzt werden müsste eigentlich nur dieser Integer Array:


    int[] status = {2,2,2,2,2,2,2,2,2};


    Leider funktioniert das mit diesem einfachen Befehl nicht:


    status = {2,2,2,2,2,2,2,2,2};


    Leider bin ich noch Anfänger und weiß daher nicht wie ich mein Spiel sonst zurücksetzen kann und versuche nun hier Hilfe zu finden.Vielen Dank für jede Hilfe!