【发布时间】:2018-09-07 14:56:38
【问题描述】:
我在 Android Studio 中尝试使用媒体播放器时遇到了麻烦,似乎我没有正确初始化媒体播放器,导致应用程序在 SoundFXPlayer.setVolume( ) 函数被调用。但是,该应用程序在模拟器(API 26-28)中正常运行,并且我测试的大多数手机(使用 API 26-27 的手机),除了在 Android 8.0(API 28)上运行的手机。 总结 1.如何正确初始化媒体播放器 2. 为什么我的代码可以在模拟器上运行,而不能在手机上运行。
我是stackoverflow的新手,没有编程经验,如果没有提供足够的细节,请见谅。
错误信息如下:
java.lang.RuntimeException:无法启动活动 组件信息{com.example.garmischwong.buttongame/com.example.garmischwong.buttongame.MenuActivity}: java.lang.NullPointerException:尝试调用虚拟方法'void android.media.MediaPlayer.setVolume(float, float)' 在一个空对象上 参考
package com.example.garmischwong.buttongame;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MenuActivity extends AppCompatActivity {
private Button gameButton;
public int SoundFXVolume;
public MediaPlayer SoundFXPlayer;
public static final String GAME_PREF = "gamePref" ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
gameButton = findViewById(R.id.gameButton);
SoundFXPlayer = MediaPlayer.create(this, R.raw.menu_selection_click);
loadSoundFX();
SoundFXPlayer.setVolume((float)SoundFXVolume/100,(float)SoundFXVolume/100);
}
public void goToGameAct(View view)
{
//////Intent to game///////
SoundFXPlayer.start();
Intent goToGameIntent = new Intent(MenuActivity.this, GameActivity.class);
startActivity(goToGameIntent);
finish();
}
public void loadSoundFX()
{
SharedPreferences gamePref = getSharedPreferences(String.valueOf(GAME_PREF), MODE_PRIVATE);
SoundFXVolume = gamePref.getInt("Sound_FX_Volume", 30);
}
【问题讨论】:
-
您在 api 28 上测试了哪些手机。文件的格式(扩展名)是什么。顺便说一句,api 28 是 android 9 手机(馅饼)。
-
文件格式是.wav,导致问题,谢谢。
-
哦,我以为 API 28 是 Android 8.0 (Oreo),我想我把它们弄混了。感谢您纠正我。
标签: java android nullpointerexception media-player crash