【问题标题】:android studio media player null object referenceandroid studio 媒体播放器空对象引用
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • 天哪,谢谢,它成功了。非常感谢您快速、准确和简单的回复,我真的很想给您的回复投票,但我的声誉太低了。谢谢。
  • @Roman Svitukha 重新编码是什么意思?请同时提供代码示例
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多