Не запускается активити из-за ошибки, которой раньше не было

276
11 мая 2018, 15:44

Не трогал код этого класса вообще, всегда он работал как надо и не выдавал ошибок. Этот класс мне нужен для запуска фоновой музыки. Как-то раз я заметил, что у меня эта музыка в папке assets находится и в raw.Подумал, что одна из них лишняя и надо удалить. Удалил сначала в raw, понял, что тупанул, т.к. ресурс от туда беру. Удалил в assets, почему-то перестала запускаться активити. Думаю, ладно, верну тогда всё как было, пусть и там, и там будет музыка. Вернул, но вышла ошибка в коде, которой никогда раньше не возникала. Я уже делал возврат к последнему рабочему коммиту, делал CleanProject, RebuildProject, ничего не помогает избавиться от неё.

Помогите у кого какие идеи на этот счёт? Код я вообще не трогал, только вот музыку удалял и то уже всё на свои места вернул.

Ошибка:

java.lang.RuntimeException: Unable to start activity ComponentInfo{dc.galos/dc.galos.View.Authorization}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.MediaPlayer.setAudioStreamType(int)' on a null object reference
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2650)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2720)
    at android.app.ActivityThread.-wrap12(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1567)
    at android.os.Handler.dispatchMessage(Handler.java:111)
    at android.os.Looper.loop(Looper.java:207)
    at android.app.ActivityThread.main(ActivityThread.java:5917)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.MediaPlayer.setAudioStreamType(int)' on a null object reference
    at dc.galos.Controller.Sound.initialization(Sound.java:15)
    at dc.galos.View.Authorization.onCreate(Authorization.java:38)
    at android.app.Activity.performCreate(Activity.java:6286)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1113)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2603)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2720) 
    at android.app.ActivityThread.-wrap12(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1567) 
    at android.os.Handler.dispatchMessage(Handler.java:111) 
    at android.os.Looper.loop(Looper.java:207) 
    at android.app.ActivityThread.main(ActivityThread.java:5917) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749) 

Сказано, что активити пытается вызвать метод, который ссылается на нулевой объект (хотя раньше прекрасно вызывался).

Сам код, в котором этот метод на нулевой объект ссылается:

public class Sound {
    private MediaPlayer mediaPlayer;
    private static boolean volume = true;
    public void initialization(Context context, int res_id) {
        mediaPlayer = MediaPlayer.create(context, res_id);
        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        mediaPlayer.setLooping(true);
    }
    public void mediaStart() {
        mediaPlayer.start();
    }
    public void mediaStop() {
        mediaPlayer.stop();
    }
    public static boolean isVolume() {
        return volume;
    }
    public static void setVolume(boolean volume) {
        Sound.volume = volume;
    }
}

Здесь проблема в строке mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); судя по ошибке. AudioManager.STREAM_MUSIC видимо является null, хотя повторюсь, раньше оно таковым не являлось. Как можно это исправить?

Вызываю метод в другой активити, которая как раз и не запускается таким образом:

sound.initialization(this, R.raw.background_music);
Answer 1

Попробуй переписать несколько строк, связанные с этим вызовом, так как у меня также часто бывает, что при откате некоторые объекты ругаются мол так нельзя, откуда ты это взял, и пока вручную снова не забьешь не компилится, также советую проследить путь где он теряет файл, а может он вообще в папку не заходит и тогда понятно почему null

Answer 2

Ваша ошибка:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.MediaPlayer.setAudioStreamType(int)' on a null object reference

По-русски:

Метод setAudioStreamType не может быть вызван на несуществующем объекте.

В вашей строке кода mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC) этот метод вы вызываете у вашего mediaPlayer, и null именно он, а не AudioManager.STREAM_MUSIC.

А значит null у вас возвращает MediaPlayer.create(context, res_id). Проверьте, почему так выходит.

READ ALSO
Как выводить картинки горизонтально в html (jsp)?

Как выводить картинки горизонтально в html (jsp)?

Ниже пример кода в jspВ этом примере они выводятся вертикально

263
Распознавание речи google

Распознавание речи google

1) Как сделать что бы Java программа распознавания речи google под Android работала без остановки? Те

278
Вывод матрицы на консоль в виде пирамиды

Вывод матрицы на консоль в виде пирамиды

Не могу придумать, как можно заполнить матрицу таким образом и вывести её на экран?

390