Android App Absturz beim Starten

Til7373

Mitglied
Hallo Leute,
Ich bin kein kompletter Anfänger mehr in Java sondern hab schon etwas Erfahrung in Sachen programmieren, in richtig Android Apps hab ich allerdings noch nicht sonderlich viel gemacht.
Ich wollte gerne ein Mathe Quiz machen. Wenn ihr den code seht denkt ihr wahrscheinlich was ich für eine Logik habe, aber das eigentliche problem ist, dass mein Programm beim Debuggen auf meinem Handy immer sofort abstürzt, obwohl es keine Fehlermeldungen zuvor gibt.
Hier jetzt noch einmal die mainActivity.java als TextDatei und die Fehlermeldung dann nach dem Debuggen.


Code:
06-13 20:40:53.808 7892-7892/com.andriod.tiljo.mathfix D/AndroidRuntime: Shutting down VM
06-13 20:40:53.818 7892-7892/com.andriod.tiljo.mathfix E/AndroidRuntime:
FATAL EXCEPTION: main
Process: com.andriod.tiljo.mathfix, PID: 7892
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.andriod.tiljo.mathfix/com.andriod.tiljo.mathfix.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:224
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2410)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1313)
at android.os.Handler.dispatchMessage(Handler.java:10
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5345)
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:947)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:742)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
                                                                             at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:68)
                                                                             at android.support.v7.app.AppCompatDelegateImplV7.<init>(AppCompatDelegateImplV7.java:146)
                                                                             at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:28)
                                                                             at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:41)
                                                                             at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:190)
                                                                             at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:172)
                                                                             at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:512)
                                                                             at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:184)
                                                                             at com.andriod.tiljo.mathfix.MainActivity.<init>(MainActivity.java:19)
                                                                             at java.lang.reflect.Constructor.newInstance(Native Method)
                                                                             at java.lang.Class.newInstance(Class.java:1606)
                                                                             at android.app.Instrumentation.newActivity(Instrumentation.java:1066)
                                                                             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2236)
                                                                             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2410)
                                                                             at android.app.ActivityThread.access$800(ActivityThread.java:151)
                                                                             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1313)
                                                                             at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                             at android.os.Looper.loop(Looper.java:135)
                                                                             at android.app.ActivityThread.main(ActivityThread.java:5345)
                                                                             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:947)
 

Anhänge

Zuletzt bearbeitet von einem Moderator:
Die Fehlermeldung ist doch eh eindeutig: NullPointerException
Es wird wo auf ein nicht initialisiertes Objekt zugegriffen.

Der StackTrace sagt das Zeile 19 in deiner Klasse "MainActivity" Code aufruft welcher die Exception verursacht.
Meine Vermutung: Du willst deine TextView Variablen zu früh initialisieren, der Kontext ist noch nicht ready.

Zu deinem Code:
Statt
Java:
switch (random) {
  case 1:
  korrekt = true;
  break;
  case 4:
  korrekt = true;
  break;
  case 5:
  korrekt = true;
  break;
  case 8:
  korrekt = true;
  break;
  case 11:
  korrekt = true;
  break;
  case 14:
  korrekt = true;
  break;
  case 15:
  korrekt = true;
  break;
  case 18:
  korrekt = true;
  break;
  default:
  t1.setText("");
  }
könntest du auch einfach
Java:
switch (random) {
   case 1:
   case 4:
   case 5:
   case 8:
   case 11:
   case 14:
   case 15:
   case 18:
     korrekt = true;
     break;
   default:
     t1.setText("");
}
schreiben
 
ok verstehe ich aber ich kriege es nicht hin auf die Objekte zuzugreifen wen ich sie in
public void onCreate(Bundle savedInstanceState) initialisiere. obwohl alles public ist und mit new und MainActivity.b1 klappt nicht.
 
Im moment gar nicht weil ich jetzt die Objekte einfach außerhalb von
public void onCreate(Bundle savedInstanceState) initialisiert habe was aber ja nicht funktioniert
 
Java:
boolean korrekt = true;
        int random = (int) (Math.random() * 20 )+1;
        TextView t1 = (TextView) findViewById(R.id.textView1);
        TextView t2 = (TextView) findViewById(R.id.textView);
        TextView t3 = (TextView) findViewById(R.id.textView2);
        TextView t4 = (TextView) findViewById(R.id.textView3);
        ImageButton b1 = (ImageButton) findViewById(R.id.imageButton2);
        ImageButton b2 = (ImageButton) findViewById(R.id.imageButton);
        ImageButton b3 = (ImageButton) findViewById(R.id.image_Button1);

Damit initialisiere ich alles was ich dann brauche.
Ich bin mir jetzt nicht sicher wie ich bei den Listeners auf diese Objekte zugreife.
 
Ja und dieser Code steht ja nicht im Konstruktor. Diese Zeilen werden vor dem Konstruktor Aufruf ausgeführt, zu diesem Zeitpunkt existieren die Komponenten aber noch nicht (der StackTrace verrät in Zeile 19 der Klasse wird der Fehler verursacht).
Daher würde ich die Initialisierungen in den Konstruktor verschieben (oder je nachdem obs bei Android da was eigenes spezielles gibt).
 
ok das programm stürzt auf dem Handy nicht mehr ab🙂
Allerdings muss ich es trotzdem schaffen die random zahl im Listener aus dem anderen Konstruktor zu holen weil ich die gleiche zahl brauche.also im ersten Konstruktor wird mit ner switch schleife alles durchgegangen was bei math.random() kommt und macht daraufhin die textfelder voll.
im listener muss allerdings auch überprüft werden wenn ich auf beispielsweise den ersten Button klicke und die random zahl diese ist wo sich das Ergebnis tatsächlich auf diesem button befindet.
die random zahl muss allerdings in beiden konstruktoren die gleiche sein
 
so ich bin jetzt etwas weiter aber es klappt alles immer noch nicht gut.
und zwar kann ich auf den zweiten und dritten button klicken und es passiert auch wenn das ergebnis falsch ist und beim klick auf den ersten button stürzt das programm immer ab.
hier einmal die MainActivity und beim buttonklick wird die onclick.java ausgeführt.

Java:
package com.andriod.tiljo.mathfix;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.TextView;


public class MainActivity extends AppCompatActivity {


    public static int random;

    public int setRandom() {
        return random;
    }

    public static boolean korrekt;

    public boolean getKorrekt() {
        return korrekt;
    }

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
random = (int)(Math.random()*20)+1;
korrekt = true;
        TextView t1 = (TextView) findViewById(R.id.textView1);
        TextView t2 = (TextView) findViewById(R.id.textView);
        TextView t3 = (TextView) findViewById(R.id.textView2);
        TextView t4 = (TextView) findViewById(R.id.textView3);
        ImageButton b1 = (ImageButton) findViewById(R.id.imageButton2);
        ImageButton b2 = (ImageButton) findViewById(R.id.imageButton);
        ImageButton b3 = (ImageButton) findViewById(R.id.image_Button1);

if(korrekt==false){
    System.exit(0);
}
        int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20;


        a1 = 84;
        a2 = 15;
        a3 = 13;
        a4 = 12;
        a5 = 35;
        a6 = 12;
        a7 = 0;
        a8 = 16;
        a9 = -13;
        a10 = 19;
        a11 = 77;
        a12 = 8;
        a13 = 20;
        a14 = 32;
        a15 = 4;
        a16 = 18;
        a17 = 30;
        a18 = 200;
        a19 = 15;
        a20 = 9;
        String a1s, a2s, a3s, a4s, a5s, a6s, a7s, a8s, a9s, a10s, a11s, a12s, a13s, a14s, a15s, a16s, a17s, a18s, a19s, a20s;
        a1s = String.valueOf(a1);
        a2s = String.valueOf(a2);
        a3s = String.valueOf(a3);
        a4s = String.valueOf(a4);
        a5s = String.valueOf(a5);
        a6s = String.valueOf(a6);
        a7s = String.valueOf(a7);
        a8s = String.valueOf(a8);
        a9s = String.valueOf(a9);
        a10s = String.valueOf(a10);
        a11s = String.valueOf(a11);
        a12s = String.valueOf(a12);
        a13s = String.valueOf(a13);
        a14s = String.valueOf(a14);
        a15s = String.valueOf(a15);
        a16s = String.valueOf(a16);
        a17s = String.valueOf(a17);
        a18s = String.valueOf(a18);
        a19s = String.valueOf(a19);
        a20s = String.valueOf(a20);


        String ar1, ar2, ar3, ar4, ar5, ar6, ar7, ar8, ar9, ar10, ar11, ar12, ar13, ar14, ar15, ar16, ar17, ar18, ar19, ar20;
        ar1 = "8x10+4";
        ar2 = "5+6+2+10-8";
        ar3 = "20:2+3";
        ar4 = "6x20:10";
        ar5 = "5x(10-3)";
        ar6 = "(5+3-2)x2";
        ar7 = "8-10+2";
        ar8 = "4x2²";
        ar9 = "5-3x6";
        ar10 = "4+9+3x2";
        ar11 = "80,5-7*0,5";
        ar12 = "(4-3)x8";
        ar13 = "30:3+10";
        ar14 = "56-20-4";
        ar15 = "5:2+1,5";
        ar16 = "17+7-2*3";
        ar17 = "8x3+6";
        ar18 = "20x5+100";
        ar19 = "45x2:6";
        ar20 = "(8-5)²";


        switch (random) {
            case 1:
                t1.setText(ar1);
                t2.setText(a1s);
                t3.setText(a3s);
                t4.setText(a8s);
                break;
            case 2:
                t1.setText(ar2);
                t3.setText(a2s);
                t2.setText(a9s);
                t4.setText(a12s);
                break;
            case 3:
                t1.setText(ar3);
                t4.setText(a3s);
                t2.setText(a15s);
                t3.setText(a19s);

                break;
            case 4:
                t1.setText(ar4);
                t2.setText(a4s);
                t3.setText(a10s);
                t4.setText(a2s);
                break;

            case 5:
                t1.setText(ar5);
                t2.setText(a5s);
                t3.setText(a3s);
                t4.setText(a20s);
                break;

            case 6:
                t1.setText(ar6);
                t2.setText(a1s);
                t3.setText(a6s);
                t4.setText(a4s);
                break;

            case 7:
                t1.setText(ar7);
                t2.setText(a17s);
                t3.setText(a10s);
                t4.setText(a7s);
                break;

            case 8:
                t1.setText(ar8);
                t2.setText(a8s);
                t3.setText(a11s);
                t4.setText(a9s);
                break;

            case 9:
                t1.setText(ar9);
                t2.setText(a12s);
                t3.setText(a9s);
                t4.setText(a18s);
                break;

            case 10:
                t1.setText(ar10);
                t2.setText(a1s);
                t3.setText(a14s);
                t4.setText(a10s);
                break;

            case 11:
                t1.setText(ar11);
                t2.setText(a11s);
                t3.setText(a13s);
                t4.setText(a8s);
                break;

            case 12:
                t1.setText(ar12);
                t2.setText(a20s);
                t3.setText(a12s);
                t4.setText(a6s);
                break;

            case 13:
                t1.setText(ar13);
                t2.setText(a16s);
                t3.setText(a9s);
                t4.setText(a13s);
                break;

            case 14:
                t1.setText(ar14);
                t2.setText(a14s);
                t3.setText(a5s);
                t4.setText(a13s);
                break;

            case 15:
                t1.setText(ar15);
                t2.setText(a15s);
                t3.setText(a4s);
                t4.setText(a17s);
                break;

            case 16:
                t1.setText(ar16);
                t2.setText(a10s);
                t3.setText(a16s);
                t4.setText(a15s);
                break;

            case 17:
                t1.setText(ar17);
                t2.setText(a11s);
                t3.setText(a2s);
                t4.setText(a17s);
                break;

            case 18:
                t1.setText(ar18);
                t2.setText(a18s);
                t3.setText(a9s);
                t4.setText(a14s);
                break;

            case 19:
                t1.setText(ar19);
                t2.setText(a1s);
                t3.setText(a19s);
                t4.setText(a6s);
                break;

            case 20:
                t1.setText(ar20);
                t2.setText(a19s);
                t3.setText(a7s);
                t4.setText(a20s);
                break;

            default:
                t1.setText("");
        }




    }


}

und hier die OnClick.java:
Java:
public class OnClick {




    public static void sendMessage(View view) {
        MainActivity.korrekt=false;
        switch (view.getId()) {
            case R.id.imageButton2:
                switch (MainActivity.random) {
                    case 1:
                        MainActivity.korrekt = true;
                        break;
                    case 4:
                        MainActivity.korrekt = true;
                        break;
                    case 5:
                        MainActivity.korrekt = true;
                        break;
                    case 8:
                        MainActivity.korrekt = true;
                        break;
                    case 11:
                        MainActivity.korrekt = true;
                        break;
                    case 14:
                        MainActivity.korrekt = true;
                        break;
                    case 15:
                        MainActivity.korrekt = true;
                        break;
                    case 18:
                        MainActivity.korrekt = true;
                        break;
                    default:

               }

                break;




            case R.id.imageButton:
                switch(MainActivity.random){
                    case 2:
                        MainActivity.korrekt =true;
                        break;
                    case 6:
                        MainActivity.korrekt=true;
                        break;
                    case 9:
                        MainActivity.korrekt=true;
                        break;
                    case 12:
                        MainActivity.korrekt=true;
                        break;
                    case 16:
                        MainActivity.korrekt=true;
                        break;
                    case 19:
                        MainActivity.korrekt=true;
                        break;
                    default:

                }

                break;
            case R.id.image_Button1:
                switch(MainActivity.random){
                    case 3:
                        MainActivity.korrekt=true;
                        break;
                    case 7:
                        MainActivity.korrekt=true;
                        break;
                    case 10:
                        MainActivity.korrekt=true;
                        break;
                    case 13:
                        MainActivity.korrekt=true;
                        break;
                    case 17:
                        MainActivity.korrekt=true;
                        break;
                    case 20:
                        MainActivity.korrekt=true;
                        break;
                    default:

                }

                break;
            default:

                break; }
        if(MainActivity.korrekt=false){
            System.exit(0);
        }
    }
}

und die Fehlermeldung beim klick auf den obesten button also image_button2 lautet:

06-15 15:53:20.976 25738-25738/com.andriod.tiljo.mathfix E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.andriod.tiljo.mathfix, PID: 25738
java.lang.IllegalStateException: Could not find method setListFooter(View) in a parent or ancestor Context for android😱nClick attribute defined on view class android.support.v7.widget.AppCompatTextView with id 'textView'
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:325)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284)
at android.view.View.performClick(View.java:4791)
at android.view.View$PerformClick.run(View.java:19884)
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:5345)
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:947)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:742)
 
und die Fehlermeldung beim klick auf den obesten button also image_button2 lautet:

06-15 15:53:20.976 25738-25738/com.andriod.tiljo.mathfix E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.andriod.tiljo.mathfix, PID: 25738
java.lang.IllegalStateException: Could not find method setListFooter(View) in a parent or ancestor Context for android😱nClick attribute defined on view class android.support.v7.widget.AppCompatTextView with id 'textView'

Das steht doch genau was der Fehler ist. Es wird keine Methode mit den Namen "setListFooter" gefunden. Kontrolliere deinen Code ob du hier wo diese Methode aufrufst bzw. warum diese und wo diese deklariert sein sollte.
 
habs jetzt wieder anders und zwar alle listener in der MainActivity aber was komisch ist, dass nur der Listener vom ersten button funktioniert🙁
Java:
b2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v1) {
                MainActivity.korrekt = false;
                t1.setText("");
            }
        });
    b1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v2) {


            switch (MainActivity.random) {
                case 1:
                    MainActivity.korrekt = true;
                    break;
                case 4:
                    MainActivity.korrekt = true;
                    break;
                case 5:
                    MainActivity.korrekt = true;
                    break;
                case 8:
                    MainActivity.korrekt = true;
                    break;
                case 11:
                    MainActivity.korrekt = true;
                    break;
                case 14:
                    MainActivity.korrekt = true;
                    break;
                case 15:
                    MainActivity.korrekt = true;
                    break;
                case 18:
                    MainActivity.korrekt = true;
                    break;
                default:
                    System.exit(0);
            }
        }
    });




    b3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v3) {
            MainActivity.korrekt = false;

            switch (MainActivity.random) {
                case 3:
                    MainActivity.korrekt = true;
                    break;
                case 7:
                    MainActivity.korrekt = true;
                    break;
                case 10:
                    MainActivity.korrekt = true;
                    break;
                case 13:
                    MainActivity.korrekt = true;
                    break;
                case 17:
                    MainActivity.korrekt = true;
                    break;
                case 20:
                    MainActivity.korrekt = true;
                    break;
                default:
                    System.exit(0);

            }
        }
    });
 
Momentan weiß ich noch, wie das funktionieren soll. Kannst du den Code so auskommentieren, dass z.B. nur der Zufallswert "1" benutzt wird. Dann kannst du genau sehen, wie das angezeigt wird. ich kann bei den Listenern keine Auswertefunktion erkennen. Soweit ich das sehe, erstellst du die UI-Objekte in der OnCreate. Üblicherweise verschwinden diese, wenn die OnCreate beendet wird. Daher werden solche Elemente üblicherweise als Klassenvariablen angelegt. Ansonsten wäre es gut, wenn alle Dateien, also auch die R- und die Manifestdatei mitgepostet wird. Dann kann man das Projekt mal im Emulator nachvollziehen.
 
Soweit ich das sehe, erstellst du die UI-Objekte in der OnCreate. Üblicherweise verschwinden diese, wenn die OnCreate beendet wird. Daher werden solche Elemente üblicherweise als Klassenvariablen angelegt.
Die Deklarierung war schon außerhalb der OnCreate Methode, aber ebenso die Initialisierung. Auf mein Anraten sollte die Initialisierung in die OnCreate verschoben werden.
Anscheinend wurde beides verschoben :/
 
Java:
public static int random;

    public int setRandom() {
        return random;
    }

    public static boolean korrekt;

    public boolean getKorrekt() {
        return korrekt;
    }

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

korrekt = true;
        final TextView t1 = (TextView) findViewById(R.id.textView1);
        final TextView t2 = (TextView) findViewById(R.id.textView);
        final TextView t3 = (TextView) findViewById(R.id.textView2);
        final TextView t4 = (TextView) findViewById(R.id.textView3);
         ImageButton b1 = (ImageButton) findViewById(R.id.imageButton2);
        ImageButton b2 = (ImageButton) findViewById(R.id.imageButton);
         ImageButton b3 = (ImageButton) findViewById(R.id.image_Button1);

so sieht das momentan aus, also werden die Objekte eigentlich in der OnCreate initialisiert.
Ist das richtig?
 
Deklariert und Initialisiert!
Die Deklarierung sollte aber außerhalb passieren, nur die Initialisierung innerhalb von#onCreate.


Gibts einen Grund, warum random und korrekt static sind?
 
Java:
int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20;


        a1 = 84;
        a2 = 15;
        a3 = 13;
        a4 = 12;
        a5 = 35;
        a6 = 12;
        a7 = 0;
        a8 = 16;
        a9 = -13;
        a10 = 19;
        a11 = 77;
        a12 = 8;
        a13 = 20;
        a14 = 32;
        a15 = 4;
        a16 = 18;
        a17 = 30;
        a18 = 200;
        a19 = 15;
        a20 = 9;
        String a1s, a2s, a3s, a4s, a5s, a6s, a7s, a8s, a9s, a10s, a11s, a12s, a13s, a14s, a15s, a16s, a17s, a18s, a19s, a20s;
        a1s = String.valueOf(a1);
        a2s = String.valueOf(a2);
        a3s = String.valueOf(a3);
        a4s = String.valueOf(a4);
        a5s = String.valueOf(a5);
        a6s = String.valueOf(a6);
        a7s = String.valueOf(a7);
        a8s = String.valueOf(a8);
        a9s = String.valueOf(a9);
        a10s = String.valueOf(a10);
        a11s = String.valueOf(a11);
        a12s = String.valueOf(a12);
        a13s = String.valueOf(a13);
        a14s = String.valueOf(a14);
        a15s = String.valueOf(a15);
        a16s = String.valueOf(a16);
        a17s = String.valueOf(a17);
        a18s = String.valueOf(a18);
        a19s = String.valueOf(a19);
        a20s = String.valueOf(a20);

//random = 1 also gehts in den teil der schleife; ar1 ist die Rechnung die anderen Ergebnise.

random = 1;
switch (random) {
    case 1:
        t1.setText(ar1);
        t2.setText(a1s);
        t3.setText(a3s);
        t4.setText(a8s);
        break;
default:
    t1.setText("")
}


//Dann kommen die Listener und nur bei b1 funktioniert es (bei b2 ist ein Test weil das Textfeld t1 //wird auch nicht leer wenn ich auf den Button klicke also der Button geht nicht)
// Wenn ich den ersten Button klicke passiert nichts weil er in case 1 geht. wenn ich  zum //Beispiel random=2 mache und den ersten Button klicke dann schließt sich das programm.also b1 funktioniert

b2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v1) {
            MainActivity.korrekt = false;
            t1.setText("");
        }
    });
b1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v2) {


        switch (MainActivity.random) {
            case 1:
                MainActivity.korrekt = true;
                break;
            case 4:
                MainActivity.korrekt = true;
                break;
            case 5:
                MainActivity.korrekt = true;
                break;
            case 8:
                MainActivity.korrekt = true;
                break;
            case 11:
                MainActivity.korrekt = true;
                break;
            case 14:
                MainActivity.korrekt = true;
                break;
            case 15:
                MainActivity.korrekt = true;
                break;
            case 18:
                MainActivity.korrekt = true;
                break;
            default:
                System.exit(0);
        }
    }
});




b3.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v3) {
        MainActivity.korrekt = false;

        switch (MainActivity.random) {
            case 3:
                MainActivity.korrekt = true;
                break;
            case 7:
                MainActivity.korrekt = true;
                break;
            case 10:
                MainActivity.korrekt = true;
                break;
            case 13:
                MainActivity.korrekt = true;
                break;
            case 17:
                MainActivity.korrekt = true;
                break;
            case 20:
                MainActivity.korrekt = true;
                break;
            default:
                System.exit(0);

        }
    }
});

Ich hoffe das schafft etwas übersichtlichkeit
 
obwohl doch und zwar gibt mir in den Listener eine Fehlermeldung wenn ich die Variablen nicht static mache:
Non-static_Field "korrekt" cannot be referneced from a non-static context
 
und sorry dass ich keine Arrays benutze sollt ich benutzen aber ist jetzt aufwendig umzuschreiben aber beim weiteren programmieren werd ich es verwenden danke😉
 
also versteht man nicht was da passieren soll bzw. passiert
Doch, es ist nur extrem unübersichtlich und umständlich.
Hat auch nicht wirklich was mit deinem Problem zu tun, oder?

obwohl doch und zwar gibt mir in den Listener eine Fehlermeldung wenn ich die Variablen nicht static mache:
Non-static_Field "korrekt" cannot be referneced from a non-static context
Du versuchst weiterhin auf eine statische Variable zuzugreifen, die gibts eben nicht. Du musst auf die Instanzvariable zugreifen. Hat aber auch nichts mit deinem Problem zu tun, sind nur Punkte, die du beachten solltest, weil sie wahrscheinlich sonst irgendwann zu Problemen führen.


und sorry dass ich keine Arrays benutze sollt ich benutzen aber ist jetzt aufwendig umzuschreiben aber beim weiteren programmieren werd ich es verwenden danke😉

Es würde deinen Code ziemlich vereinfachen 😉
 
Ich habe einen Vorschlag: Mach ein neues Projekt in Eclipse auf. Erzeuge dort für dein Android-System deine vier Edit-Felder und drei Button. Lege nun einfach fest "1+1", "1","2" und "3". So wie ich das verstehe, soll der Benutzer auf den Button drücken, bei dem das richtige Ergebnis steht, in diesem Falle also dem 2ten. Nun sollte eine Meldung kommen: "richtig" mit einem Button "nächste Aufgabe". Dazu brauchst du noch ein Edit-Feld und einen Button. Wenn der falsche Button gedrückt wird, muss auch eine Meldung "falsch" mit Button "Noch mal versuchen" erscheinen. Für die Anzeige dieser Meldungen sind die Actionlistener verantwortlich. Der üblicherweise notwendige "Exit"-Knopf fällt ja wohl neuerdings bei Android weg. Wie weit bekommst du diese Anwendung zu laufen? Wenn sie läuft, brauchst du nur die Abschnitte in dein jetziges Projekt zu kopieren. Der Code ist aber übersichtlicher, weil die ganzen Zuweisungen und switch fehlen. Hast du das Projekt schon mal mit SWT oder so programmiert?
 
wie soll ich die UIs außerhalb von onCreate deklarieren

Hier ein Beispiel um zu zeigen was der Unterschied zwischen der Deklaration einer Variable ist und deren Initialisierung!

Java:
public class MyClass {
    private int counter; // Deklaration einer int-Variable mit der Bezeichnung counter

    public MyClass(int counter) {
        this.counter = counter; // Initialisierung der Instanzvariable mit der Bezeichnung counter;
    }
}
Die Deklaration legt nur fest es gibt nun eine Variable im entsprechenden Scope. Die Initialisierung legt dann den Anfangs-/Startwert fest.
 
ich hatte nicht genau verstanden was ich machen soll

Java:
package test3;
import javax.swing.*;
import java.awt.event.*;
import java.awt.BorderLayout;

public class test {
    static boolean korrekt;

    public static void main(String[]args) {
       
        JFrame frame = new JFrame("Mathfix");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 600);
        JPanel panel = new JPanel(new BorderLayout(5, 5));
        frame.setLayout(new BorderLayout(5,5));
       
       
        JTextField t1 = new JTextField("");
        JButton button1 = new JButton("");
        JButton button2 = new JButton("");
        JButton button3 = new JButton("");
        frame.getContentPane().add(BorderLayout.NORTH, t1);
        frame.getContentPane().add(BorderLayout.EAST, button1);
        frame.getContentPane().add(BorderLayout.SOUTH, button2);
        frame.getContentPane().add(BorderLayout.WEST, button3);
       
       
        frame.pack();
        frame.setVisible(true);
       
       
        String rechnung = "5+6-8";
        String ergebnis1 = "4";
        String ergebnis2 = "3";
        String ergebnis3 = "2";
        
       
        t1.setText(rechnung);
        button1.setText(ergebnis2);
        button2.setText(ergebnis1);
        button3.setText(ergebnis3);
   
        button1.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                korrekt=true;
                System.out.println(korrekt);
            }
        });
       
        button2.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                korrekt=false;
                System.out.println(korrekt);
            }
        });
       
        button3.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                korrekt=false;
                System.out.println(korrekt);
            }
        });
       
       

       
    }}


Hier ist jetzt mal das programm sehr vereinfacht.
Ich glaube aber dass es an den listeners in android liegt weil das ist ja hier nicht das gleiche.
 
Soweit OK. Nun erstellst du eine Methode OnCreate, genau wie beim Android. Dann legst du für den Swing die gleiche Funktionalität in diese Methode wie beim Android-Gerät. Dann siehst du, was du ändern musst.

Übrigens: der loop ist imme noch nicht geschlossen.
 
ich hab jetzt mein android programm etwas übersichtlicher gemacht dass heißt auf euren rat mit den arrays gehört und hab mehr kommentiert.#
ich hoffe man kann jetzt genau nachvollziehen was passiert.
ich hab in einem android app entwicklungs buch nochmal nachgeschlagen und die Listener genau danach geschrieben.
Trotzdem passieren nur die richtigen Sachen wenn ich auf den ersten Button klicke bei den anderen passiert einfach nie was.

Java:
package com.andriod.tiljo.mathfix;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.TextView;


public class MainActivity extends AppCompatActivity {


//Buttons und textfelder
    TextView t1,t2,t3,t4;
    ImageButton b1,b2,b3;


//random zahl (rechnung)
  static  int random;


// variable korrekt
    public  static boolean korrekt;



    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
//Aufruf der unten erstellten Listeners
        setButtonClickListener1();
        setButtonClickListener2();
        setButtonClickListener3();


        t1 = (TextView) findViewById(R.id.textView1);
        t2 = (TextView) findViewById(R.id.textView);
        t3 = (TextView) findViewById(R.id.textView2);
        t4 = (TextView) findViewById(R.id.textView3);

        korrekt = true;


//Ergebniise als Arrays
        String[] e = {"84", "15", "13", "12", "35", "12", "0", "16", "-13", "19", "77", "8", "20", "32", "4", "18", "30", "200", "15", "9"};


//Rechnungen als Arrays
        String[] r = {"8x10+4", "5+6+2+10-8", "20:2+3", "6x20:10", "5x(10-3)", "(5+3-2)x2", "8-10+2", "4x2²", "5-3x6", "4+9+3x2", "80,5-7*0,5", "(4-3)x8",
                "30:3+10", "56-20-4", "5:2+1,5", "17+7-2*3", "8x3+6", "20x5+100", "45x2:6", "(8-5)²"};

//Bei bestimmter radnom Rechnung anzeigen und ein richtiges und zwei falsche Ergebnisse irgendwo
        random = (int) (Math.random() * 20) + 1;
        switch (random) {
            case 1:
                t1.setText(r[0]);
                t2.setText(e[0]);
                t3.setText(e[2]);
                t4.setText(e[7]);
                break;
            case 2:
                t1.setText(r[1]);
                t3.setText(e[1]);
                t2.setText(e[8]);
                t4.setText(e[10]);
                break;
            case 3:
                t1.setText(r[2]);
                t4.setText(e[2]);
                t2.setText(e[14]);
                t3.setText(e[5]);

                break;
            case 4:
                t1.setText(r[3]);
                t2.setText(e[3]);
                t3.setText(e[9]);
                t4.setText(e[1]);
                break;

            case 5:
                t1.setText(r[4]);
                t2.setText(e[4]);
                t3.setText(e[2]);
                t4.setText(e[19]);
                break;

            case 6:
                t1.setText(r[5]);
                t2.setText(e[0]);
                t3.setText(e[5]);
                t4.setText(e[3]);
                break;

            case 7:
                t1.setText(r[6]);
                t2.setText(e[16]);
                t3.setText(e[9]);
                t4.setText(e[6]);
                break;

            case 8:
                t1.setText(r[7]);
                t2.setText(e[7]);
                t3.setText(e[10]);
                t4.setText(e[8]);
                break;

            case 9:
                t1.setText(r[8]);
                t2.setText(e[11]);
                t3.setText(e[8]);
                t4.setText(e[17]);
                break;

            case 10:
                t1.setText(r[9]);
                t2.setText(e[0]);
                t3.setText(e[13]);
                t4.setText(e[9]);
                break;

            case 11:
                t1.setText(r[10]);
                t2.setText(e[10]);
                t3.setText(e[12]);
                t4.setText(e[7]);
                break;

            case 12:
                t1.setText(r[11]);
                t2.setText(e[19]);
                t3.setText(e[11]);
                t4.setText(e[5]);
                break;

            case 13:
                t1.setText(r[12]);
                t2.setText(e[15]);
                t3.setText(e[8]);
                t4.setText(e[12]);
                break;

            case 14:
                t1.setText(r[13]);
                t2.setText(e[13]);
                t3.setText(e[4]);
                t4.setText(e[12]);
                break;

            case 15:
                t1.setText(r[14]);
                t2.setText(e[14]);
                t3.setText(e[3]);
                t4.setText(e[16]);
                break;

            case 16:
                t1.setText(r[15]);
                t2.setText(e[9]);
                t3.setText(e[15]);
                t4.setText(e[14]);
                break;

            case 17:
                t1.setText(r[16]);
                t2.setText(e[10]);
                t3.setText(e[1]);
                t4.setText(e[16]);
                break;

            case 18:
                t1.setText(r[17]);
                t2.setText(e[17]);
                t3.setText(e[8]);
                t4.setText(e[13]);
                break;

            case 19:
                t1.setText(r[18]);
                t2.setText(e[0]);
                t3.setText(e[18]);
                t4.setText(e[5]);
                break;

            case 20:
                t1.setText(r[19]);
                t2.setText(e[18]);
                t3.setText(e[6]);
                t4.setText(e[19]);
                break;

            default:
                t1.setText("");
        }

    }

    //Listener für Button 1
public void setButtonClickListener1(){
    b1 = (ImageButton) findViewById(R.id.imageButton2);
    b1.setOnClickListener(new View.OnClickListener(){
        public void onClick(View view){
            switch (MainActivity.random) {

                case 1:
                case 4:
                case 5:
                case 8:
                case 11:
                case 14:
                case 15:
                case 18:
                    MainActivity.korrekt = true;
                    break;
                default:
                    t1.setText("");
            }
            }
    });
}
//Listener für Button 2
    public void setButtonClickListener2(){
        b2 = (ImageButton) findViewById(R.id.imageButton);
        b2.setOnClickListener(new View.OnClickListener(){
            public void onClick(View view){
                switch(MainActivity.random){

                    case 2:
                    case 6:
                    case 9:
                    case 12:
                    case 16:
                    case 19:
                        MainActivity.korrekt = true;
                        break;
                    default:
                        t1.setText("");


                }
            }
        });
    }

    //Listener für Button 3
    public void setButtonClickListener3(){
        b3 = (ImageButton) findViewById(R.id.image_Button1);
        b3.setOnClickListener(new View.OnClickListener(){
            public void onClick(View view){
                switch (MainActivity.random) {

                    case 3:
                    case 7:
                    case 10:
                    case 13:
                    case 17:
                    case 20:
                        MainActivity.korrekt=true;
                        break;
                    default:
                        t1.setText("");

                }
            }
        });
    }


}
 
Erstmal: änder deine Variablennamen! t1 bis t4, imageButton1, imageButton2, image_button, e, r, .... das sind so ziemlich die schlimmsten Bezeichnungen die man hätte wählen können. Wie willst du dein eigenes Programm morgen noch verstehen, wenn sämtliche Variablen nichtssagend sind und wie willkürlich gewählt erscheinen?

wie glaubst du zu erkennen das nur der erste button funktioniert?
In allen Listenern setzt du korrekt auf true setzt den Text von t1 auf "".
ergo machen deine Listener quasi alle das gleiche. Kann es vielleicht sein das du eigentlich den text von den anderen textboxen auf "" setzen willst und nicht immer nur von t1 ?
 
T ist Textfeld und b ist button r ist Rechnung und e Ergebnis ich find das nicht sehr kompliziert aber dadrum gehts ja nicht.
Das Problem ist dass wenn das Ergebnis auf button1 steht dann passiert nichts und wenn das Flasche Ergebnis auf button 1 steht wird das Textfeld(t1) leer.
Wenn jetzt aber der button2 das falsche Ergebnis enthält und ich klicke dann passiert nichts obwohl eigentlich das Textfeld leern werden sollte.
 
Gut. Er wird das Textfeld aber erst neu als leer anzeigen, wenn du die alte Ansicht ungültig erklärt hast, denn dann wird neu gezeichnet.
 
Ja das stimmt aber auch wenn ich als erstes auf den 2. Button oder 3. klicke passiert nichts.
Es ist wirklich ein Problem mit den listeners aber ich seh kein Unterschied zwischen dem ersten und den anderen listener
 
Hast du das ganze mal im Debugger ausprobiert, ob er nicht vielleicht doch in den Listener reinspringt? Vielleicht hast du einen Logikfehler und denkst nur, dass nichts passiert?
Was mir ansonsten aufgefallen ist, dass du b1 (steht ja wohl für Button1?) den Button mit der Nummer 2 zuweist während du b2 den Button ohne eine Zahl zuweist? Und b3 bekommt den Button mit der 1. Das ist ziemlich verwirrend und solltest du ändern (vielleicht liegt hier ja sogar das Problem?).
 
hallo,
danke für eure Hilfe.
Ich habe den Fehler gefunden!🙂
Es lag dadran dass ich ja textfelder auf den Buttons hatte.zwei von den dreien(bei button2 und 3)
hab ich in xml irgendwie als clickable true gesetzt wodurch das Programm anscheinend nicht in die Listener gegangen ist.
Ich hätte jetzt noch eine Frage bezüglich verschiedenen Activities in Android und zwar will ich eine Activity(Start) starten wenn man falsch getippt hat.
ich hab das erstmal so gemacht:
Java:
// erst ein Intent
Start = new Intent(MainActivity.this,Start.class);
//und dann soll damit versucht werden eine variable an //die andere Activity zu senden und sie zu starten

Start.putExtra(Intent.EXTRA_TEXT,Punktestand);
                                startActivity(Start);


Leider bekomm ich eine Fehlermeldung dass es die Activity Start nicht findet und ob ich sie in dem Manifest registriert habe.
Das habe ich eigentlich schon:
Code:
 <activity
            android:name=".Start"
            android:label="@string/Falsch"
            android:parentActivityName=".MainActivity" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.andriod.tiljo.mathfix.Start" />
        </activity>
 

Zurück
Oben