【问题标题】:how to fix NPE from fragment?如何从片段中修复 NPE?
【发布时间】:2015-04-30 13:27:30
【问题描述】:

从我的应用程序的片段中,我需要在myService.class 中调用该状态的公共无效。

事实上,我需要对 mediaPlayer 的按钮执行操作,这将从片段中调用。 当第一次按btn_PlayResume - 它startService(); 当第二次按下 - 调用 pause(); 如果再次调用 - 只需调用 play(),而不是再次调用 startService()

我有下一个代码:

@Override
    public void onClick(View v) {
        switch (isPlaying){
            case 0:
                btn_PlayResume.setImageResource(R.drawable.select_btn_pause);
                isPlaying=1; //is playing
                getActivity().startService(serviceIntent);
                break;
            case 1:
                btn_PlayResume.setImageResource(R.drawable.select_btn_play);
                isPlaying=2;// on pause
                myService.pauseAudio();
                break;
            case 2:
                btn_PlayResume.setImageResource(R.drawable.select_btn_pause);
                isPlaying=1; //is playing
                myServise.playAudio();
                break;
        }
    }

但是当我运行我的应用程序时,myService.pauseAudio(); 中有 NPE

那么,我该如何解决? 很高兴有任何帮助

【问题讨论】:

    标签: android service nullpointerexception fragment


    【解决方案1】:

    通过创建扩展Service的类的对象,使用LocalBroadcastManager而不是从Service调用pauseAudio()playAudio()方法。

    使用LocalBroadcastManager从Activity发送不同动作的Intent,在Service中暂停和播放MediaPlayer

    请参阅以下教程以使用LocalBroadcastManager

    Java Android Program to Demonstrate Local BroadCast Manager

    【讨论】:

    • 很好的解决方案,谢谢!但是,如果您在示例中向我解释一下,我将非常感激。 sendBroadcast(); startActivity(new Intent("android.intent.action.Activityone")); "android.intent.action.Activityone" 是什么?在我的情况下,我不需要开始新的活动......
    • @AndriyAntonov: android.intent.action.Activityone 自定义操作字符串。您还需要创建两个操作字符串。喜欢android.intent.action.MEDIA_PLAY,android.intent.action.MEDIA_PAUSE
    • 抱歉,点击错误
    猜你喜欢
    • 1970-01-01
    • 2020-02-25
    • 2019-06-27
    • 1970-01-01
    • 1970-01-01
    • 2020-01-11
    • 2014-07-25
    • 2022-01-10
    • 2011-06-01
    相关资源
    最近更新 更多