2016-11-06 1 views
0

Ich habe eine Klasse für den MediaPlayer erstellt, so dass ich von mehreren Klassen zugreifen kann, da ich Medien in einmal Aktivität starten und in einem anderen beenden muss. Beim Versuch, den MediaPlayer aufzurufen, erhalte ich einen Fehler. Ich verstehe nicht, wo ich falsch liege, da ich den Fehler nicht vollständig verstehe. Vor dem Erstellen der Klasse für den MediaPlayer funktionierte es, aber es erlaubte mir nicht das zu tun, was ich wollte. Könnte jemand mir raten, wie ich mein Problem oder eine andere Art des Zugriffs auf den MediaPlayer lösen kann. Danke im Voraus.Android MediaPlayer in seiner eigenen Klasse verursacht App-Absturz

In der MainActivity-Klasse rufe ich den Media Player an.

public class MainActivity extends AppCompatActivity { 
    Music gm = new Music(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // Display the Main Activity. 
     setContentView(R.layout.activity_main); 

     gm.menuSound(true); 
    } 
} 

Die Klasse Mediaplayer ist, wo der Media Player erstellt wird und wo der Mediaplayer gestartet und gestoppt wird.

public class Music extends gameActivity{ 
    Context context; 

    MediaPlayer menu; 
    MediaPlayer soundtrack; 
    MediaPlayer death; 
    MediaPlayer start; 

    public void menuSound(boolean x) { 
     if(menu == null) { 
      menu = MediaPlayer.create(context, R.raw.menumusic); 
      menu.setVolume(100, 100); 
     } 

     if(x) 
      menu.start(); 
     if(!x) 
      menu.stop(); 
    } 
} 

--------- Anfang crash E/Android Runtime: fatal EXCEPTION: main Prozess: com.example.sam.myfirstapp, PID: 2395 Java .lang.RuntimeException: Aktivität kann nicht gestartet werden ComponentInfo {com.beispiel.sam.meinfirstapp/com.beispiel.sam.myfirstapp.MainActivity}: java.lang.NullPointerException: Versuch, die virtuelle Methode 'android.content.res.Resources android aufzurufen .content.Context.getResources() 'für einen Nullobjektverweis bei android.app.ActivityThread.performLaunchActiv ity (ActivityThread.java:2646) bei android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2707) bei android.app.ActivityThread.-wrap12 (ActivityThread.java) bei android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1460) bei android.os.Handler.dispatchMessage (Handler.java:102) bei android.os.Looper.loop (Looper.java:154) bei android.app.ActivityThread.main (ActivityThread .java: 6077) bei java.lang.reflect.Method.invoke (native Methode) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:865) bei com.android.internal. os.ZygoteInit.main (ZygoteInit.java:755) verursacht durch: java.lang.NullP ointerException: Versuch, virtuelle Methode 'android.content.res.Resources android.content.Context.getResources()' auf einem Nullobjekt Referenz bei android.media.MediaPlayer.create (MediaPlayer.java:931) bei Android aufzurufen. media.MediaPlayer.create (MediaPlayer.java:914) bei com.example.sam.myfirstapp.Music.menuSound (Music.java:21) bei com.example.sam.myfirstapp.MainActivity.onCreate (MainActivity.java: 18) bei android.app.Activity.performCreate (Activity.java:6664) bei android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1118) bei android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2599) bei android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2707) bei android.app.ActivityThread.-wrap12 (ActivityThread.java) bei android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1460) bei android.os.Handler.dispatchMessage (Handler.java:102) bei android.os.Looper.loop (Looper.java:154) bei android.app.ActivityThread.main (ActivityThread.Java: 6077) bei java.lang.reflect.Method.invoke (native Methode) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java: 865) bei com.android.internal.os .ZygoteInit.main (ZygoteInit.java:755)

+0

Mögliche Duplikat [? Was für eine Nullpointer ist, und wie kann ich es beheben] (http://stackoverflow.com/questions/218384/what -is-a-nullpointerexception-and-how-do-i-fix-it) – pathfinderelite

Antwort

0

Der Fehler ist mit Null-Kontext, den Kontext in Musikklasse nicht initialisiert haben.

public class MainActivity extends AppCompatActivity { 
Music gm ; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Display the Main Activity. 
    setContentView(R.layout.activity_main); 
     gm = new Music(this); // pass context here to music 
    gm.menuSound(true); 
} 

und Musik-Klasse wie folgt aus:

public class Music extends gameActivity{ 
Context context; 

MediaPlayer menu; 
MediaPlayer soundtrack; 
MediaPlayer death; 
MediaPlayer start; 

public Music(Context context){ 
     this.context =context; // initialising context here 
     } 

public void menuSound(boolean x) { 
    if(menu == null) { 
     menu = MediaPlayer.create(context, R.raw.menumusic); // here context was causing null pointer exception as context was null 
     menu.setVolume(100, 100); 
    } 

    if(x) 
     menu.start(); 
    if(!x) 
     menu.stop(); 
} 
0

Ihre context Variable ist null; du hast es nie eingestellt.

Da Sie den MediaPlayer auch für mehrere Aktivitäten verwenden, sollten Sie den Anwendungskontext verwenden, um Kontextlecks zu vermeiden.

menu = MediaPlayer.create(context.getApplicationContext(), R.raw.menumusic);