2016-11-06 50 views
0

我已经为MediaPlayer创建了一个类,以便我可以从多个类访问它,因为我需要在一次活动中启动媒体并将其停止在另一个活动中。 当试图调用mediaPlayer时,我得到一个错误。 我不明白我在哪里出错,因为我没有完全理解错误。 在创建MediaPlayer的类之前,它正在工作,但它不允许我做我想要的。 有人可以告诉我如何解决我的问题或访问MediaPlayer的不同方式。提前致谢。Android MediaPlayer在它自己的类中导致应用程序崩溃

MainActivity类是我从中调用媒体播放器的地方。

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); 
    } 
} 

在MediaPlayer类是被创建并在媒体播放器启动和停止媒体播放器在哪里。

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(); 
    } 
} 

---------碰撞 E/AndroidRuntime的开头:致命异常:主 工艺:com.example.sam.myfirstapp,PID:2395 的java .lang.RuntimeException:无法启动活动ComponentInfo {com.example.sam.myfirstapp/com.example.sam.myfirstapp.MainActivity}:java.lang.NullPointerException:尝试调用虚拟方法'android.content.res.Resources android .content.Context.getResources()'的空对象引用 at android.app.ActivityThread.performLaunchActiv ity(ActivityThread.java:2646) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1460) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread .java:6077) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:865) at com.android.internal。java.lang.reflect.Method.invoke(Native Method) 。 os.ZygoteInit.main(ZygoteInit.java:755) 引起:java.lang.NullP ointerException:试图在android上的android.media.MediaPlayer.create(MediaPlayer.java:931) 上的null对象引用 上调用虚拟方法'android.content.resources android.content.Context.getResources()'。 media.MediaPlayer.create(MediaPlayer.java:914) at com.example.sam.myfirstapp.Music.menuSound(Music.java:21) at com.example.sam.myfirstapp.MainActivity.onCreate(MainActivity.java: 18) at android.app.Activity.performCreate(Activity.java:6664) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 在android.app.ActivityThread.-wrap12(ActivityThread.java) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1460) 在android.os.Handler.dispatchMessage(Handler.java:102) 在android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread。java:6077) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:865) at com.android.internal.os .ZygoteInit.main(ZygoteInit.java:755)

+0

的可能的复制[?什么是空指针异常,以及如何解决呢(http://stackoverflow.com/questions/218384/what -is-A-NullPointerException异常和知识-DO-I-FIX-IT) – pathfinderelite

回答

0

错误是在null上下文中,您尚未初始化音乐类中的上下文。

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); 
} 

和音乐类这样的:

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

context你变量是null;你从来没有设置它。

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

此外,由于您在多个活动中使用MediaPlayer,因此请确保使用应用程序上下文来避免上下文泄漏。

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