android studio media player 空对象引用

android studio media player null object reference

我 运行 在 Android Studio 中尝试使用媒体播放器时遇到了麻烦,似乎我没有正确初始化媒体播放器,导致应用程序崩溃(在 phones 运行ning on Android 8.0) 当调用 SoundFXPlayer.setVolume() 函数时。但是,该应用程序在模拟器 (API 26 - 28) 中正常运行,并且我测试的大多数 phone (phones with on API 26-27) ,除了phone 运行 在 Android 8.0 (API 28) 上。 总结一下 1.如何正确初始化媒体播放器 2. 为什么我的代码可以在模拟器上运行,但不能在 phone.

上运行

我是 Whosebug 的新手,没有编程经验,如果没有提供足够的细节,请见谅。

报错如下:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.garmischwong.buttongame/com.example.garmischwong.buttongame.MenuActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.MediaPlayer.setVolume(float, float)' on a null object reference

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

很可能音频格式不受支持。您可以使用 8 位和 16 位线性 PCM。以下是有关支持的媒体格式的更多信息:supported media formats

解决方法是重新编码 mp3 文件。