Search code examples
androidandroid-mediaplayeroncreate

MediaPlayer definition outside onCreate throws NullpointerException?


I need my MediaPlayer Object to be visible as a class variable rather than local to oncreate.

But when I try to initiate it like this-

public class TextAct extends AppCompatActivity
{

    MediaPlayer wavesMp =  MediaPlayer.create(this, R.raw.river);//Line 132
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
    .
    .
    }

This fails with same error as well-

public class TextAct extends AppCompatActivity
{

    MediaPlayer wavesMp; //Line 132
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
     wavesMp=  MediaPlayer.create(this, R.raw.river);
    .
    }

Logcat says-

Process: com.app24.gg.relaaax, PID: 24202 java.lang.RuntimeException: Unable to instantiate activity > ComponentInfo{com.app24.gg.relaaax/com.app24.gg.relaaax.TextAct}: java.lang.NullPointerException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2126) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2249) at android.app.ActivityThread.access$800(ActivityThread.java:141) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1212) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5113) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException at android.content.ContextWrapper.getResources(ContextWrapper.java:89) at android.view.ContextThemeWrapper.getResources(ContextThemeWrapper.java:78) at android.media.MediaPlayer.create(MediaPlayer.java:844) at com.app24.gg.relaaax.TextAct.(TextAct.java:132)


Solution

  • MediaPlayer needs context. And if the onCreate method is not called, then Activity is not prepared and it's Context cannot be used.