Переменная вдруг становится нулевой?
Хорошо, я знаю, как это смешно или отстойно, поэтому рискуя своей репутацией, я спрашиваю, как это возможно:
player = new MediaPlayerCompat();
player.setWakeMode(XenoAmpService.this, PowerManager.PARTIAL_WAKE_LOCK);
player.reset();
player.setOnPreparedListener(null);
try {
player.setDataSource(spath);
player.setAudioStreamType(AudioManager.STREAM_MUSIC); // NullPointerException?!?!?!
Обратите внимание, что AudioManager.STREAM_MUSIC является статическим (вставлено из источника Android):
public static final int STREAM_MUSIC = AudioSystem.STREAM_MUSIC;
Как это может создать NPE в этой строке с setDataSource, не вызывая его?
Примечание: я не могу отладить его, потому что он не на моей машине. Это аварийный рапорт. Бывает для одного пользователя, не бывает для других тысяч.
Примечание 2: spath также не является нулевым, он обрабатывается ранее в коде. player.setAudioStreamType также проверяет наличие возможных нулей, но код все равно не доходит до них...
Примечание 3: трассировка стека (не думаю, что это поможет, хотя)...
java.lang.NullPointerException: Attempt to invoke virtual method 'void pl.qus.xenoamp.helper.MediaPlayerCompat.setAudioStreamType(int)' on a null object reference
at pl.qus.xenoamp.xenoservice.XenoAmpService$AggregateMediaPlayer.prepare(XenoAmpService.java:2433)
at pl.qus.xenoamp.xenoservice.XenoAmpService$AggregateMediaPlayer.zastąpDrugi(XenoAmpService.java:2577)
at pl.qus.xenoamp.xenoservice.XenoAmpService.zmieńDrugiWrapper(XenoAmpService.java:2238)
at pl.qus.xenoamp.xenoservice.XenoAmpService$AggregateMediaPlayer$1$2$1.execute(XenoAmpService.java:2520)
at pl.qus.threading.StoppableRunnable.run(StoppableRunnable.java:48)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)