java - Android ICS MediaPlayer 仅在用于同时播放的变量上崩溃

标签 java android crash media-player android-4.0-ice-cream-sandwich

我在两个不同的应用程序中有两种类型的 MediaPlayer 播放。一种是单个变量,等待完成后再播放下一个单词/声音效果。这似乎工作正常。另一个是一组最多 4 个同时播放的 MediaPlayer 变量。这适用于 2.3.3,似乎也适用于 4.0.3 虚拟设备,但在我的 TF101 上,这两个应用程序都会崩溃。

如果触摸错误,将调用 playse('oops')。

public void playse(String ss){
    MediaPlayer tempse;

    if(tse1 == null){tempse = tse1;}
    else{if(tse2 == null){tempse = tse2;}
    else{if(tse3 == null){tempse = tse3;}
    else{if(tse4== null){tempse = tse4;}}}}

   if(ss == "oops"){ tempse =  MediaPlayer.create(mContext, R.raw.seoops); tempse.start();}
}

在应用程序的主循环中,4 个变量的处理方式如下:

        if(tse1 != null){ if(tse1.isPlaying()== false){tse1.release(); tse1=  null;} }

        if(tse2 != null){ if(tse2.isPlaying()== false){tse2.release(); tse2=  null;} }

        if(tse3 != null){ if(tse3.isPlaying()== false){tse3.release(); tse3=  null;} }  

        if(tse4 != null){ if(tse4.isPlaying()== false){tse4.release(); tse4=  null;} }

最佳答案

你可以缩写

MediaPlayer tempse;
if(tse1 == null){tempse = tse1;}
else{if(tse2 == null){tempse = tse2;}
else{if(tse3 == null){tempse = tse3;}
else{if(tse4== null){tempse = tse4;}}}}

MediaPlayer tempse = null;

也许您应该将 == 更改为 !=

这是我在不知道你得到什么错误的情况下能看到的唯一的东西。

关于java - Android ICS MediaPlayer 仅在用于同时播放的变量上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9763266/

相关文章:

java - 以下 "private static inner class"实现正确吗?

java - 如何使用贝塞尔曲线绘制通过一组点的平滑线?

android - 如何将数据从 Phonegap View 传递到 wikitude 的架构师 View

Android 未捕获且无白屏

java - 应用程序在 recyclerViewPager 上运行时不显示任何内容

java - 登录表单: Keyboard hides on button click,,但点击edittext后不再显示

android - 如何在 Qt (QML) 应用程序中使用适用于 Android 的 Tensorflow?

java - 如何使用 AsyncTask 类来更新将文件复制到另一个目录的进度?

iphone - 删除标签的内容 - Objective C

iphone - 使用运行循环堆栈跟踪修复iPhone崩溃