Ссылка на нулевой объект

У меня возникли проблемы при попытке использовать медиаплеер в Android Studio, похоже, что я не инициализировал медиаплеер должным образом, что привело к сбою приложения (на телефонах с Android 8.0), когда функция SoundFXPlayer.setVolume() называется. Тем не менее, приложение работало должным образом в эмуляторе (API 26 - 28) и на большинстве телефонов, которые я тестировал (телефоны с API 26-27), КРОМЕ телефонов, работающих на Android 8.0 (API 28) . Подводя итог: 1. Как правильно инициализировать медиаплеер 2. Почему мой код работает на эмуляторе, а не на телефоне.

я новичок в stackru и не опытный в программировании, извините, если не дал достаточно деталей.

Сообщение об ошибке следующим образом:

java.lang.RuntimeException: Невозможно запустить действие ComponentInfo{com.example.garmischwong.buttongame/com.example.garmischwong.buttongame.MenuActivity}: java.lang.NullPointerException: попытка вызвать виртуальный метод void android.media.Mia.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);
    }

1 ответ

Решение

Скорее всего, аудио формат не поддерживается. Вы можете использовать 8-битную и 16-битную линейную PCM. Вот дополнительная информация о поддерживаемых форматах мультимедиа: поддерживаемые форматы мультимедиа

Решение состоит в том, чтобы перекодировать mp3-файлы.

Другие вопросы по тегам