Eigene App stürzt ab :(

R

Ranger1999

Neues Mitglied
0
Meine selbstprogrammierte App stürzt ununterbrochen ab.
Da ich noch sehr jung und damit unerfahren bin wollte ich euch fragen, da ihr davon warscheinlich mehr ahnung habt als ich :biggrin:
Hier der Code:
Code:
package com.example.test;

import android.os.Bundle;
import android.app.Activity;
import android.view.Display;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener {

    Display display = getWindowManager().getDefaultDisplay();
    int screenHeight = display.getHeight();
    int screenWidth = display.getWidth();
    public Button btn;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        
        getMenuInflater().inflate(R.menu.main, menu);
        
        btn.findViewById(R.id.button);
        btn.setOnClickListener(this);
        
        return true;
    }

    @Override
    public void onClick(View v) {
        
        int zpx = (int) (Math.random()*screenWidth+0);
        int zpy = (int) (Math.random()*screenHeight+0);
        btn.setX(zpx);
        btn.setY(zpy);
        
    }

}
Meine Idee war es einen Button zu generieren und jedesmal wenn der Button gedrückt wird ändert er seine Position. Ganz simpel und ausbaufähig deswegen würd ich gerne wissen ob ich was falsch gemacht hab bzw. überhaupt was richtig gemacht hab :blink:
BTW Ich benutze Eclipse

Danke im Vorraus für die Hilfe

MFG
Ranger
 
In Eclipse/Android Studio werden dir unten Meldungen ausgegeben, da gibt es eine Error-Meldung die dortstehen müsste wenn deine App abstürzt. Lern entweder selbst diese zu lesen oder lern es diese selbst zu lesen ;) (kopier die Meldung gerne hier rein für den Anfang... aber es ist unerlässlich dass du selbst verstehst was dort ausgegeben wird, wie du dort selbst etwas ausgeben kannst, etc. )

Suchbegriffe für dich: Logcat, Debugging, etc. :)
 
Danke für deine Antwort.
Das Problem ist ja, dass Eclipse keinen Error ausgibt, sondern der Emulator/Android :(
Ich habe ja bis jetzt auch jeden Error verstanden und behoben.
Das einzigste was passiert ist dass die App auf dem Emulator startet und wieder zugeht mit der Meldung:

"Unfortunately ,Press the Button(<--AppName) has stopped."
 
Ok ich hab jetzt mal den Logcat verlauf gelöscht und die app im emulator gestartet und es ist folgendes herausgekommen:
Code:
01-06 10:29:44.687: E/AndroidRuntime(776): FATAL EXCEPTION: main
01-06 10:29:44.687: E/AndroidRuntime(776): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.test/com.example.test.MainActivity}: java.lang.NullPointerException
01-06 10:29:44.687: E/AndroidRuntime(776):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2137)
01-06 10:29:44.687: E/AndroidRuntime(776):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
01-06 10:29:44.687: E/AndroidRuntime(776):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
01-06 10:29:44.687: E/AndroidRuntime(776):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
01-06 10:29:44.687: E/AndroidRuntime(776):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-06 10:29:44.687: E/AndroidRuntime(776):     at android.os.Looper.loop(Looper.java:137)
01-06 10:29:44.687: E/AndroidRuntime(776):     at android.app.ActivityThread.main(ActivityThread.java:5103)
01-06 10:29:44.687: E/AndroidRuntime(776):     at java.lang.reflect.Method.invokeNative(Native Method)
01-06 10:29:44.687: E/AndroidRuntime(776):     at java.lang.reflect.Method.invoke(Method.java:525)
01-06 10:29:44.687: E/AndroidRuntime(776):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
01-06 10:29:44.687: E/AndroidRuntime(776):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-06 10:29:44.687: E/AndroidRuntime(776):     at dalvik.system.NativeStart.main(Native Method)
01-06 10:29:44.687: E/AndroidRuntime(776): Caused by: java.lang.NullPointerException
01-06 10:29:44.687: E/AndroidRuntime(776):     at com.example.test.MainActivity.<init>(MainActivity.java:13)
01-06 10:29:44.687: E/AndroidRuntime(776):     at java.lang.Class.newInstanceImpl(Native Method)
01-06 10:29:44.687: E/AndroidRuntime(776):     at java.lang.Class.newInstance(Class.java:1130)
01-06 10:29:44.687: E/AndroidRuntime(776):     at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
01-06 10:29:44.687: E/AndroidRuntime(776):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2128)
01-06 10:29:44.687: E/AndroidRuntime(776):     ... 11 more
01-06 10:30:08.577: E/SoundPool(287): error loading /system/media/audio/ui/Effect_Tick.ogg
01-06 10:30:08.577: E/SoundPool(287): error loading /system/media/audio/ui/Effect_Tick.ogg
01-06 10:30:08.577: E/SoundPool(287): error loading /system/media/audio/ui/Effect_Tick.ogg
01-06 10:30:08.587: E/SoundPool(287): error loading /system/media/audio/ui/Effect_Tick.ogg
01-06 10:30:08.598: E/SoundPool(287): error loading /system/media/audio/ui/Effect_Tick.ogg
01-06 10:30:08.640: E/SoundPool(287): error loading /system/media/audio/ui/KeypressStandard.ogg
01-06 10:30:08.681: E/SoundPool(287): error loading /system/media/audio/ui/KeypressSpacebar.ogg
01-06 10:30:08.707: E/SoundPool(287): error loading /system/media/audio/ui/KeypressDelete.ogg
01-06 10:30:08.707: E/SoundPool(287): error loading /system/media/audio/ui/KeypressReturn.ogg

Da schaue ich jetzt auch nicht mehr durch D:
 
Ok dann versuch ich dir das mal ein wenig zu erklären:
01-06 10:29:44.687: E/AndroidRuntime(776): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.test/com.example.test.MainActivity}: java.lang.NullPointerException

Da ist die Exception bzw der Fehler der auftritt, der sagt aber generell erst mal nur das deine Activity nicht gestartet werden konnte, ganz hinten auch noch warum genau.
Dann kommt ganz viel Text von wo aus die entsprechende Codezeile aufgerufen wurde.

Interessant wird es für dich wieder bei den Zeilen:
01-06 10:29:44.687: E/AndroidRuntime(776): Caused by: java.lang.NullPointerException
01-06 10:29:44.687: E/AndroidRuntime(776): at com.example.test.MainActivity.<init>(MainActivity.java:13)

Hier ist der wahre Grund warum die obere Fehlermeldung ausgelöst wurde.
Und hier siehst du auch wo genau der Fehler auftaucht:
MainActivity.java:13
bedeutet deine MainActivity Klasse in Zeile 13.

Also guck mal was da in der Zeile steht.
Allerdings wirst du später noch weitere Probleme bekommen dein button wird niemals gesetzt und ist immer null
btn.findViewById(R.id.button);
Das muss
btn = findViewBy..usw.
heißen.
 
Android Activity

d.h.:
"Display display = getWindowManager().getDefaultDisplay();
int screenHeight = display.getHeight();
int screenWidth = display.getWidth();"

Diese Aufrufe erst in bspw. onCreate machen. Also oben schreibst du hin "Display display;
int screenHeight;
int screenHeight;"

Und die Zuweisung/Berechnung erst in bspw. onCreate
 
@Kleinerkathe
@amfa
Vielen herzlichen Dank für die schnelle und hilfreiche Lösung.
Jetzt läuft das Programm.
Nur der Button bleibt in der oberen rechten ecke :(
Mit dem Problem werd ich mich jetzt aber rumschlagen ;)

MFG

Ranger1999
 
kleinerkathe schrieb:
Android Activity

d.h.:
"Display display = getWindowManager().getDefaultDisplay();

Ohje das hab ich glatt übersehen :D
Natürlich ist gibt getWindowManager() hier null zurück.

Erklärung:
An dieser Stelle wird noch alles von der Virtuellen Maschine erledigt.
Irgendwo im Android System steht dort ein:
Activity activity = new Activity();
Mehr wurde bisher mit der Activity nicht gemacht.
Irgendwann später wird dann.
activity.setWindowManager(manager);

aufgerufen. Und noch später dann:
acitivty.onCreate();

Da der Code ausserhalb der Methoden aber wie gesagt schon beim new ausgeführt wird, bekommst du dort eine NullPointerException.

Ich hoffe das war so verständlich :)



PS:
Der Android Code selber sieht vermutlich NICHT genauso so aber vom Prinzip her läuft das so ab.
 
Schau dir Beitrag 6 von Amfa nochmal an bzgl. Button ;)
 

Ähnliche Themen

FabianDev
Antworten
5
Aufrufe
557
swa00
swa00
S
Antworten
8
Aufrufe
511
swa00
swa00
F
  • Fischi84
Antworten
2
Aufrufe
1.916
Fischi84
F
Zurück
Oben Unten