Ссылка на нулевой объект
У меня возникли проблемы при попытке использовать медиаплеер в 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-файлы.