Попытка вызвать виртуальный метод void android.media.MediaPlayer.stop () для пустой ссылки на объект - PullRequest
0 голосов
/ 25 мая 2019

Я вызываю метод stop () в моем экземпляре медиаплеера, и он показывает «Попытка вызвать виртуальный метод void android.media.MediaPlayer.stop ()» для ссылки на нулевой объект », что означает, что объект медиаплеера имеет значение null, но когда Я пишу это как if (mediaplayer! = Null) stop (); это работает хорошо. Но если объект фактически нулевой, это условие не должно выполняться. Кто-нибудь может объяснить, что происходит?

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_hello_moon, container, false);
    Button play = v.findViewById(R.id.play);
    Button stop = v.findViewById(R.id.stop);
    play.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(mp == null) {
                mp = MediaPlayer.create(getActivity(), R.raw.one_small_step);
                mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer mp) {
                        mp.stop();
                    }
                });
                mp.start();
            }
            else {
                mp.stop();
                try {
                    mp.prepare();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                mp.start();
            }
        }
    });
    stop.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(mp != null) {
                mp.release();
                mp = null;
            }
        }
    });
    return v;
}

//this is not working
@Override
public void onDestroy() {
    super.onDestroy();
        mp.stop();
}

//this works fine
@Override
public void onDestroy() {
    super.onDestroy();
    if(mp != null)
        mp.stop();
}

1 Ответ

0 голосов
/ 25 мая 2019

Пожалуйста, попробуйте вот так

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_hello_moon, container, false);
        Button play = v.findViewById(R.id.play);
        Button stop = v.findViewById(R.id.stop);
        if(mp == null) {
            mp = MediaPlayer.create(getActivity(), R.raw.one_small_step);
            mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    mp.stop();
                }
            });
        }
        play.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(mp != null) {
                    mp.start();
                }
            }
        });
        stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(mp != null) {
                    mp.release();
                }
            }
        });
        return v;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if(mp != null)
            mp.stop();
    }
...