片段和服务器之间的通信问题

Posted

技术标签:

【中文标题】片段和服务器之间的通信问题【英文标题】:Communication problems between fragment and a server 【发布时间】:2017-07-28 19:07:26 【问题描述】:

我有一个片段想与服务器通信,但问题是我总是得到空指针

我的片段 onCreateView 中有这个:

public class BrowseFragment extends Fragment implements View.OnClickListener

private MusicService mMusicService;


@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) 
        View rootView = inflater.inflate(R.layout.fragment, container, false);



    mMusicService = new MusicService(this);
             mMusicService.setCallback(new MusicService.Callback() 


                                @Override
                                public void onPlayPause(String state) 
                                    //Do something
                                
                            );



这是我的服务:

 public class MusicService extends MediaBrowserServiceCompat 


public interface Callback 
        public void onPlayPause(String state);
    

    public void setCallback(Callback callback) 
        this.mCallback = callback;
    





private void PauseRequest() 
        mPlayback.pause();
        //if (mCallback != null) 
            mCallback.onPlayPause("PAUSE");
        //



我得到了这个 FATAL EXCEPTION: main

Process: com.geobytenet.mediaplayer, PID: 3262
java.lang.NullPointerException: Attempt to invoke interface method 'void com.example.android.mediabrowserservice.MusicService$Callback.onPlayPause(java.lang.String)' on a null object reference

希望你能帮到我

【问题讨论】:

***.com/questions/39179317/… 也许我不清楚。服务器正在工作 什么不工作是界面,我在 mCallback.onPlayPause("PAUSE"); 中得到一个错误; 您尝试使用界面时是否显示您的片段?如果它不再具有焦点,那么您的片段有可能在您调用实现之前被销毁。您确定mCallback 不会在服务的其他地方被更改吗?我整理了一些类似的东西,这对我有用。 是的,我的片段正在显示,应用程序运行正常,但是当我单击执行回调的按钮时出现错误。你能分享你说你工作的代码,看看它是否对我有帮助吗? 大部分情况下,我只是复制了您发布的代码。由于您没有发布您如何称呼PauseRequest(),因此我不确定它是如何称呼的。我在服务中创建了一个公共方法并从中调用PauseRequest()。然后在片段中,我在onClick() 中创建了一个按钮&,我在服务mMusicService.pausePlay(); 中调用公共方法如果由于此原因导致的格式在评论中使其无法阅读,如果您需要,我可以发布答案。 【参考方案1】:

在 MusicService 中,我添加了这个方法

    public void pausePlay() 
        PauseRequest();
    

然后在 BrowseFragment 中,在 onCreateView()

    Button button = (Button)rootView.findViewById(R.id.button_play_pause);
    button.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View view) 
            mMusicService.pausePlay();
        
    );

【讨论】:

【参考方案2】:

你不能像简单的类一样在 Android 中创建 MusicService。它是一项服务,必须以正确的方式启动https://medium.com/google-developers/mediabrowserservicecompat-and-the-modern-media-playback-app-7959a5196d90

【讨论】:

也许我不清楚。服务器正在工作 什么不工作是界面,我在 mCallback.onPlayPause("PAUSE"); 中得到一个错误;

以上是关于片段和服务器之间的通信问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用接口在片段和活动之间进行通信?

如何在嵌套片段内的两个子片段之间进行通信

在tablayout片段之间进行通信[重复]

Fragment和BaseAdapter之间的Android通信

是否最好使用 Activity.onAttachFragment 或 Fragment.onAttach 在 Activity 和嵌套片段之间进行通信?

如何解决服务之间的通信问题?