ссылка на нулевой объект - PullRequest
0 голосов
/ 07 сентября 2018

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

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

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

java.lang.RuntimeException: невозможно запустить действие ComponentInfo {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);
    }

1 Ответ

0 голосов
/ 07 сентября 2018

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

Решение заключается в перекодировании mp3-файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...