实战演练——仿网易音乐播放器MusicPlayer,代码没有错误,软件能跑起来,点击按钮就会崩。

一、Android开发所建的文件如下

实战演练——仿网易音乐播放器MusicPlayer,代码没有错误,软件能跑起来,点击按钮就会崩。_第1张图片

二、跑起来之后点击按钮所出现的问题:

报下面的代码

Attempt to invoke virtual method 'void com.example.musicplayer.MusicService$MusicControl.play()' on a null object reference

模拟器错误图像如下:

实战演练——仿网易音乐播放器MusicPlayer,代码没有错误,软件能跑起来,点击按钮就会崩。_第2张图片

三、错误原因:

因为我们写了service服务,所以我们要遵循service的要求来写。

service有两种状态:

1.启动状态:当应用组件通过调用 startService() 启动服务时,服务即处于“启动”状态。一旦启动,服务即可在后台无限期运行,即使启动服务的组件已被销毁也不受影响,除非手动调用才能停止服务, 已启动的服务通常是执行单一操作,而且不会将结果返回给调用方。

2.绑定状态:当应用组件通过调用 bindService() 绑定到服务时,服务即处于“绑定”状态。绑定服务提供了一个客户端-服务器接口,允许组件与服务进行交互、发送请求、获取结果,甚至是利用进程间通信 (IPC) 跨进程执行这些操作。 仅当与另一个应用组件绑定时,绑定服务才会运行。 多个组件可以同时绑定到该服务,但全部取消绑定后,该服务即会被销毁。

但是service的这两种状态都需要在AndroidManifest.xml文件中声明才能才能够真正的跑起来,在这里我就不多赘述了,想要细学的朋友可以去搜索service的基础来学习,下面我们就赶快解决这个问题。

service是一个提供耗时操作的组件,类似于一个新的线程去处理一些复杂操作,但是执行该操作过程中用户可以继续执行其他操作service不提供直接的和用户交互的接口,需要我们声明一下才能运行,我们这就是播放音乐需要声明的其中的因素之一。

四、错误解决

我是在AndroidManifest.xml中写了如下代码:

这个代码要写在

然后再运行我们的APP

实战演练——仿网易音乐播放器MusicPlayer,代码没有错误,软件能跑起来,点击按钮就会崩。_第3张图片

我们的软件已经能跑起来,能正常的播放歌曲了。

你可能感兴趣的:(Android,studio,android,android,studio,android-studio)