1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Problem mit onPause

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Jacob91195, 30.11.2011.

  1. Jacob91195, 30.11.2011 #1
    Jacob91195

    Jacob91195 Threadstarter Neuer Benutzer

    Beiträge:
    13
    Erhaltene Danke:
    0
    Registriert seit:
    03.09.2011
    Hallo,

    ich bin grad an einer Spaß-App dran und habe ein Problem mit der onPause Methode. Immer wenn ich die App schließen will bekomme ich den Fehler, dass die App unerwartet geschlossen wurde(App stürzt ab).

    Wo ist der Fehler?
    Code:
    
    package app.best.of.hakan;
    
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.Button;
    import android.widget.TextView;
    import android.media.MediaPlayer;
    import android.view.View;
    
    
    
    public class StartingPoint extends Activity {
    	Button lache, marius, uhh, uselmann, los,  gottlob;
    	TextView display;
    	MediaPlayer lacheMusic, mariusMusic, uhhMusic, uselmannMusic, losMusic, gottlobMusic;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            lache=(Button)findViewById(R.id.lache);
            marius=(Button)findViewById(R.id.marius);
            uhh =(Button) findViewById(R.id.uhh);
            uselmann=(Button) findViewById(R.id.uselmann);
            los=(Button) findViewById(R.id.los);
            gottlob=(Button) findViewById(R.id.gottlob);
    ;
            final MediaPlayer lacheMusic = MediaPlayer.create(this, R.raw.lache);
            final MediaPlayer mariusMusic = MediaPlayer.create(this, R.raw.marius);
            final MediaPlayer uhhMusic = MediaPlayer.create(this, R.raw.uhh);
            final MediaPlayer uselmannMusic = MediaPlayer.create(this, R.raw.uselmann);
            final MediaPlayer losMusic = MediaPlayer.create(this, R.raw.los);
            final MediaPlayer gottlobMusic = MediaPlayer.create(this, R.raw.gottlob);
            
        	
    
            lache.setOnClickListener(new View.OnClickListener() {
    		
    		public void onClick(View v) {
    			
    			lacheMusic.start();
    			
    			
    		
    			}
    		
    		});   
            marius.setOnClickListener(new View.OnClickListener() {
    			
    		public void onClick(View v) {
    			
    				mariusMusic.start();
    		
    			}
    		});
            uhh.setOnClickListener(new View.OnClickListener() {
    			
    		public void onClick(View v) {
    			
    				uhhMusic.start();
    				
    			}
    		});
            uselmann.setOnClickListener(new View.OnClickListener() {		
    		public void onClick(View v) {
    		
    				uselmannMusic.start();
    		}
    		});
            los.setOnClickListener(new View.OnClickListener() {
    			
    		public void onClick(View v) {
    			
    				losMusic.start();
    			
    			}
    		});
            gottlob.setOnClickListener(new View.OnClickListener() {
    			
    		public void onClick(View v) {
    				gottlobMusic.start();
    			
    			}
    		});
     
            
        }  
            
        
    		@Override
    	protected void onPause(){
      
    		super.onPause();	
    	
    		lacheMusic.release();  
    		mariusMusic.release();
    		uhhMusic.release();
    		uselmannMusic.release();
    		losMusic.release();
    		gottlobMusic.release();
    			}	  
     
        }
    
    Hoffe auf Hilfe
    Mfg Jacob91195
     
  2. swordi, 30.11.2011 #2
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    wie schon zirka 10 000 000 mal hier gesagt,

    wenn du die logcat ausgaben hier rein kopieren würde, würde man den fehler leichter finden.
     
  3. DieGoldeneMitte, 30.11.2011 #3
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    swordi hat vollkommen recht, aber der Fehler ist offensichtlich genug für Schüsse aus der Hüfte:

    In onPause wird auf die Instanzvariablen zugegriffen, in den OnClickListenern auf die lokalen Variablen vom onCreate. Die Instanzvariablen sind also nicht initialisiert.

    Und: zu jedem onPause() gehört ein onResume().
     
    Zuletzt bearbeitet: 01.12.2011
  4. swordi, 30.11.2011 #4
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    mag sein, aber ohne logcat mach ich mir nicht mal die mühe mir da 50-100 zeilen code durch zu lesen.

    der user möchte hilfe haben, dafür sollte es ein mindestmaß an entgegen kommen geben.

    und meistens wissen die user nicht mal dass es logcat gibt, denn sonst hätte er den fehler selbst gefunden und müsste keinen thread öffnen. nach deiner antwort würde er logcat noch immer nicht kennen...
     
  5. DieGoldeneMitte, 01.12.2011 #5
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Wenn deine Antwort nicht vorher gewesen wäre, hätte ich ihn schon auf logcat aufmerksam gemacht, keine Sorge :D
     
  6. swordi, 01.12.2011 #6
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    dann is gut :D

    ich muss mir das glaub ich mal in die signatur schreiben.

    "hier gibt es keine hilfe ohne logcat" oder sowas :D
     
  7. DieGoldeneMitte, 01.12.2011 #7
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Gute Idee! (Habs gleich eingebaut) :D

    Aber leider sehen gerade die, die nicht ordentlich suchen, das erst, wenn man eine Antwort gibt.
     
  8. swordi, 01.12.2011 #8
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    jap stimmt auch wieder

    dann bräuchte man ein plugin, welches mit einem knopfdruck noch ne antwort gibt ala "siehe signatur" :D
     
  9. Jacob91195, 01.12.2011 #9
    Jacob91195

    Jacob91195 Threadstarter Neuer Benutzer

    Beiträge:
    13
    Erhaltene Danke:
    0
    Registriert seit:
    03.09.2011
    So hier das logcat:
    Code:
    12-01 18:13:42.772: E/AndroidRuntime(325): FATAL EXCEPTION: main
    12-01 18:13:42.772: E/AndroidRuntime(325): java.lang.RuntimeException: Unable to pause activity {app.best.of.hakan/app.best.of.hakan.StartingPoint}: java.lang.NullPointerException
    12-01 18:13:42.772: E/AndroidRuntime(325): 	at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2354)
    12-01 18:13:42.772: E/AndroidRuntime(325): 	at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2311)
    12-01 18:13:42.772: E/AndroidRuntime(325): 	at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:2291)
    12-01 18:13:42.772: E/AndroidRuntime(325): 	at android.app.ActivityThread.access$1700(ActivityThread.java:117)
    12-01 18:13:42.772: E/AndroidRuntime(325): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:938)
    12-01 18:13:42.772: E/AndroidRuntime(325): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    12-01 18:13:42.772: E/AndroidRuntime(325): 	at android.os.Looper.loop(Looper.java:123)
    12-01 18:13:42.772: E/AndroidRuntime(325): 	at android.app.ActivityThread.main(ActivityThread.java:3683)
    12-01 18:13:42.772: E/AndroidRuntime(325): 	at java.lang.reflect.Method.invokeNative(Native Method)
    12-01 18:13:42.772: E/AndroidRuntime(325): 	at java.lang.reflect.Method.invoke(Method.java:507)
    12-01 18:13:42.772: E/AndroidRuntime(325): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
    12-01 18:13:42.772: E/AndroidRuntime(325): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
    12-01 18:13:42.772: E/AndroidRuntime(325): 	at dalvik.system.NativeStart.main(Native Method)
    12-01 18:13:42.772: E/AndroidRuntime(325): Caused by: java.lang.NullPointerException
    12-01 18:13:42.772: E/AndroidRuntime(325): 	at app.best.of.hakan.StartingPoint.onPause(StartingPoint.java:94)
    12-01 18:13:42.772: E/AndroidRuntime(325): 	at android.app.Activity.performPause(Activity.java:3851)
    12-01 18:13:42.772: E/AndroidRuntime(325): 	at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1191)
    12-01 18:13:42.772: E/AndroidRuntime(325): 	at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2341)
    12-01 18:13:42.772: E/AndroidRuntime(325): 	... 12 more
    
    Da ich noch nicht so der Android Dev. Pro bin, wollte ich fragen wie ich das Problem lösen könnte.

    Mfg Jacob91195
     
  10. DieGoldeneMitte, 01.12.2011 #10
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Schön, dass du das Logcat gefunden hast.

    Jetzt lies dir erstmal die Antworten auf deine Frage durch. :D
     
  11. Jacob91195, 01.12.2011 #11
    Jacob91195

    Jacob91195 Threadstarter Neuer Benutzer

    Beiträge:
    13
    Erhaltene Danke:
    0
    Registriert seit:
    03.09.2011
    Habe ich getan, ich hab auch versucht das Problem zu fixen.
    1.Ansatz: Ich habe die Mediaplayer create Teile außerhalb von onCreate geschrieben(oberhalb) und die Mediaplayer im oberen Abschnitt gelöscht => App stürtzt ab
    2.Ansatz: Ich habe versucht die Mediaplayer auf public zu setzten => bekomme nen Fehler

    Da ich leider sonst keine Lösung finde hab ich noch einmal gefragt ...

    MfG Jacob91195
     
  12. swordi, 01.12.2011 #12
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    java grundkurs 1 :D
     
  13. Jacob91195, 01.12.2011 #13
    Jacob91195

    Jacob91195 Threadstarter Neuer Benutzer

    Beiträge:
    13
    Erhaltene Danke:
    0
    Registriert seit:
    03.09.2011
    Ich sag ja, dass ich nicht der android/java dev. pro bin ;)
     
  14. DieGoldeneMitte, 01.12.2011 #14
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Das haben wir auch so gemerkt :D:D

    wieder kein Logcat. *facepalm* und tschüß
     
  15. Jacob91195, 03.12.2011 #15
    Jacob91195

    Jacob91195 Threadstarter Neuer Benutzer

    Beiträge:
    13
    Erhaltene Danke:
    0
    Registriert seit:
    03.09.2011
    Mobb mich nicht -.- ;)


    Logcat:
    Code:
    12-03 11:23:26.475: E/AndroidRuntime(334): FATAL EXCEPTION: main
    12-03 11:23:26.475: E/AndroidRuntime(334): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{app.best.of.hakan/app.best.of.hakan.StartingPoint}: java.lang.NullPointerException
    12-03 11:23:26.475: E/AndroidRuntime(334): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569)
    12-03 11:23:26.475: E/AndroidRuntime(334): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
    12-03 11:23:26.475: E/AndroidRuntime(334): 	at android.app.ActivityThread.access$1500(ActivityThread.java:117)
    12-03 11:23:26.475: E/AndroidRuntime(334): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
    12-03 11:23:26.475: E/AndroidRuntime(334): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    12-03 11:23:26.475: E/AndroidRuntime(334): 	at android.os.Looper.loop(Looper.java:123)
    12-03 11:23:26.475: E/AndroidRuntime(334): 	at android.app.ActivityThread.main(ActivityThread.java:3683)
    12-03 11:23:26.475: E/AndroidRuntime(334): 	at java.lang.reflect.Method.invokeNative(Native Method)
    12-03 11:23:26.475: E/AndroidRuntime(334): 	at java.lang.reflect.Method.invoke(Method.java:507)
    12-03 11:23:26.475: E/AndroidRuntime(334): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
    12-03 11:23:26.475: E/AndroidRuntime(334): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
    12-03 11:23:26.475: E/AndroidRuntime(334): 	at dalvik.system.NativeStart.main(Native Method)
    12-03 11:23:26.475: E/AndroidRuntime(334): Caused by: java.lang.NullPointerException
    12-03 11:23:26.475: E/AndroidRuntime(334): 	at android.content.ContextWrapper.getResources(ContextWrapper.java:80)
    12-03 11:23:26.475: E/AndroidRuntime(334): 	at android.media.MediaPlayer.create(MediaPlayer.java:662)
    12-03 11:23:26.475: E/AndroidRuntime(334): 	at app.best.of.hakan.StartingPoint.<init>(StartingPoint.java:16)
    12-03 11:23:26.475: E/AndroidRuntime(334): 	at java.lang.Class.newInstanceImpl(Native Method)
    12-03 11:23:26.475: E/AndroidRuntime(334): 	at java.lang.Class.newInstance(Class.java:1409)
    12-03 11:23:26.475: E/AndroidRuntime(334): 	at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
    12-03 11:23:26.475: E/AndroidRuntime(334): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561)
    12-03 11:23:26.475: E/AndroidRuntime(334): 	... 11 more
    
    Und Source Code:
    Code:
    package app.best.of.hakan;
    
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.Button;
    import android.widget.TextView;
    import android.media.MediaPlayer;
    import android.view.View;
    
    
    
    public class StartingPoint extends Activity {
    	Button lache, marius, uhh, uselmann, los,  gottlob;
    	TextView display;
    	MediaPlayer lacheMusic = MediaPlayer.create(this, R.raw.lache);
        MediaPlayer mariusMusic = MediaPlayer.create(this, R.raw.marius);
        MediaPlayer uhhMusic = MediaPlayer.create(this, R.raw.uhh);
        MediaPlayer uselmannMusic = MediaPlayer.create(this, R.raw.uselmann);
        MediaPlayer losMusic = MediaPlayer.create(this, R.raw.los);
        MediaPlayer gottlobMusic = MediaPlayer.create(this, R.raw.gottlob);
        
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            lache=(Button)findViewById(R.id.lache);
            marius=(Button)findViewById(R.id.marius);
            uhh =(Button) findViewById(R.id.uhh);
            uselmann=(Button) findViewById(R.id.uselmann);
            los=(Button) findViewById(R.id.los);
            gottlob=(Button) findViewById(R.id.gottlob);
            
            
        	
    
            lache.setOnClickListener(new View.OnClickListener() {
    		
    		public void onClick(View v) {
    			
    			lacheMusic.start();
    			
    			
    		
    			}
    		
    		});   
            marius.setOnClickListener(new View.OnClickListener() {
    			
    		public void onClick(View v) {
    			
    				mariusMusic.start();
    		
    			}
    		});
            uhh.setOnClickListener(new View.OnClickListener() {
    			
    		public void onClick(View v) {
    			
    				uhhMusic.start();
    				
    			}
    		});
            uselmann.setOnClickListener(new View.OnClickListener() {		
    		public void onClick(View v) {
    		
    				uselmannMusic.start();
    		}
    		});
            los.setOnClickListener(new View.OnClickListener() {
    			
    		public void onClick(View v) {
    			
    				losMusic.start();
    			
    			}
    		});
            gottlob.setOnClickListener(new View.OnClickListener() {
    			
    		public void onClick(View v) {
    				gottlobMusic.start();
    			
    			}
    		});
     
            
        }  
        @Override
    	protected void onPause(){
      
    		super.onPause();
    		
    	
    		lacheMusic.release();  
    		mariusMusic.release();
    		uhhMusic.release();
    		uselmannMusic.release();
    		losMusic.release();
    		gottlobMusic.release();
    			}	  
          
        	@Override
        protected void onResume(){
        	super.onResume();	
        		
        	}
    
       
    
        	
         	
        }
    
     
  16. swordi, 03.12.2011 #16
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    endlich macht mal einer ein soundboard für den market :)
     
  17. Jacob91195, 04.12.2011 #17
    Jacob91195

    Jacob91195 Threadstarter Neuer Benutzer

    Beiträge:
    13
    Erhaltene Danke:
    0
    Registriert seit:
    03.09.2011
    wenn sie nicht funktioniert, bringt sie auch nigs -.-
     
  18. swordi, 04.12.2011 #18
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    LOL

    schade
     
  19. Jacob91195, 04.12.2011 #19
    Jacob91195

    Jacob91195 Threadstarter Neuer Benutzer

    Beiträge:
    13
    Erhaltene Danke:
    0
    Registriert seit:
    03.09.2011
    genau deshalb hab ich hier um Hilfe gefragt.... zu DieGoldeneMitte schau!
     
  20. DieGoldeneMitte, 06.12.2011 #20
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Guck die die Zeile an, die die NPE auslöst:

    Code:
    Caused by: java.lang.NullPointerException
    ...
         at app.best.of.hakan.StartingPoint.<init>(StartingPoint.java:16) 
    Du benutzt "this" hier sehr früh. Zu früh. Wenn du auf Resourcen zugreifen willst, geht das nur, wenn die Activity "bereit" dazu ist. Und das ist sie noch nicht, wenn du (bzw Android) noch nichtmal den Konstruktor aufgerufen hast.

    Regel: Zugriff auf Resourcen erst in oder nach onCreate(). Und wenn es view Resourcen sind, die man erst per setContentView() mit der Acxtivity verbindet, dann erst nach eben diesem Aufruf.
     

Diese Seite empfehlen