当前位置: 首页 > 知识库问答 >
问题:

Android MediaPlayer在它自己的类中导致应用程序崩溃

蒙才
2023-03-14

我已经为MediaPlayer创建了一个类,这样我就可以从多个类访问它,因为我需要在一次活动中启动媒体并在另一个活动中停止它。尝试调用mediaPlayer时,我出错。我不明白我在这方面出了什么错,因为我不完全理解错误。在为MediaPlayer创建类之前,它是有效的,但它不允许我做我想做的事情。是否有人可以建议我如何解决我的问题或以其他方式访问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。实例sam.myfirstapp,PID:2395 java。lang.RuntimeException:无法启动activity ComponentInfo{com.example.sam.myfirstapp/com.example.sam.myfirstapp.MainActivity}:java。lang.NullPointerException:尝试调用虚拟方法“android”。所容纳之物资源android。所容纳之物上下文android上的空对象引用上的getResources()。应用程序。ActivityThread。在android上执行LaunchActivity(ActivityThread.java:2646)。应用程序。ActivityThread。android上的handleLaunchActivity(ActivityThread.java:2707)。应用程序。ActivityThread-android上的wrap12(ActivityThread.java)。应用程序。android上的ActivityThread$H.handleMessage(ActivityThread.java:1460)。操作系统。处理程序。android上的dispatchMessage(Handler.java:102)。操作系统。活套。android上的loop(Looper.java:154)。应用程序。ActivityThread。java上的main(ActivityThread.java:6077)。lang.reflect。方法在com上调用(本机方法)。Android内部的操作系统。ZygoteInit$MethodandArgscaler。在com上运行(ZygoteInit.java:865)。Android内部的操作系统。合子岩。main(ZygoteInit.java:755)由:java引起。lang.NullPointerException:尝试调用虚拟方法“android”。所容纳之物资源android。所容纳之物上下文android上的空对象引用上的getResources()。媒体MediaPlayer。在android上创建(MediaPlayer.java:931)。媒体MediaPlayer。在com上创建(MediaPlayer.java:914)。实例sam.myfirstapp。音乐com上的menuSound(Music.java:21)。实例sam.myfirstapp。主要活动。android上的onCreate(MainActivity.java:18)。应用程序。活动在android上执行创建(Activity.java:6664)。应用程序。仪器仪表。android上的callActivityOnCreate(Instrumentation.java:1118)。应用程序。ActivityThread。在android上执行LaunchActivity(ActivityThread.java:2599)。应用程序。ActivityThread。handleLaunchActivity(ActivityThread.java:2707)

共有2个答案

柯波
2023-03-14

您的上下文变量为空;你从来没有设定过。

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

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

menu = MediaPlayer.create(context.getApplicationContext(), R.raw.menumusic);
范峰
2023-03-14

错误是空上下文,您没有在音乐类中初始化上下文。

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(); 
}
 类似资料:
  • 这里是Android开发者新手。我在MainActivity中使用recyclerview,应用程序不断崩溃。 任何帮助都将受到赞赏! 编辑:对不起,我是新来的。我已经附加了Logcat。和其他xml文件。谢谢 这是我的代码: 列出你的布局。xml: activity_main.xml: } ProductAdapter。java类: } Logcat: 致命异常:主进程:e.wolverine2

  • 我正在使用内置于Web View的Android开发浏览器。其中我面临的一个问题是,当我访问http://crashmybrowser.com测试浏览器上的选项卡崩溃时,我的整个浏览器应用程序都会崩溃。但是,当在chrome或Opera上进行相同的测试时,这些浏览器会在崩溃中幸存下来,并且只有特定的选项卡崩溃是由于访问上述网站而预期的结果。有人能帮助理解我如何在使用Webview的浏览器上处理此崩

  • 问题内容: 我正在开发一个Android 3.1应用程序,该应用程序使用USB主机模式通过USB上的MIDI与我的键盘(Korg M3)进行通信。这是在装有Android 4.0.3的Xoom上运行的。我可以通过USB接收MIDI消息而没有任何问题,但是将音符数据发送回键盘的效果是好坏参半,延迟半秒钟后便会频繁崩溃。 这是我在点击操作栏上的按钮发送注释时不断遇到的错误: E / dalvikvm(

  • 问题内容: 我已经在我的应用中实现了GCM通知。我现在尝试在用户注销时注销该应用程序。我正在使用以下代码。执行此代码时,它将导致应用程序崩溃,并显示以下logcat: 这是代码: 问题答案: 将支持库更新为25.0.0后,我遇到了同样的问题。对我来说,更新下面的库之后,在应用程序gradle文件中,问题消失了。

  • 如果设备Google Play services版本没有更新,在我的应用程序上使用以下代码会导致应用程序崩溃。 它在Android OS版本4.2.2和Google Play Services版本3.1.58的设备上崩溃(为了处理Google Play Services可用性检查,我特意降低了它的等级)。

  • 每次在共享文件夹中生成内容时,index.ts文件都会被重新构建,导出会按字母顺序排列。对我来说,这似乎打破了依赖关系。手动更改顺序,以便在具有依赖项的类再次工作之前导出依赖项。 和: 这不起作用: DevDependencies: