Java 从静态内部类调用非静态方法
我是Android新手,我面临这样一个问题:当我从静态内部类调用非静态方法时,我有nullPointerException,下面是我的代码Java 从静态内部类调用非静态方法,java,android,Java,Android,我是Android新手,我面临这样一个问题:当我从静态内部类调用非静态方法时,我有nullPointerException,下面是我的代码 public void playPauseMusic() { // check for already playing if (mp.isPlaying()) { if (mp != null) { mp.pause(); // Changing button image to
public void playPauseMusic() {
// check for already playing
if (mp.isPlaying()) {
if (mp != null) {
mp.pause();
// Changing button image to play button
btnPlay.setImageResource(R.drawable.btn_play);
}
} else {
// Resume surah
if (mp != null) {
mp.start();
// Changing button image to pause button
btnPlay.setImageResource(R.drawable.btn_pause);
}
}
}
public static class notifyPlayPauseListner extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("PLAY/Pause Tag","In the listener Play/Pause ");
MainActivity mc = new MainActivity();
mc.playPauseMusic();
}
}
这可能是一个简单的概念,但我对安卓系统还不熟悉,这就是为什么要问这个问题。好心帮忙
MainActivity mc = new MainActivity();
实例化新活动没有任何意义。相反,您需要找到MainActivity
的现有实例,并调用它所需的方法
此外,使用活动播放音乐也不是一个好主意。考虑使用.
,最有可能的是,代码的这部分不像你期望的那样工作:
MainActivity mc = new MainActivity();
mc.playPauseMusic();
这实际上创建了MainActivity
的一个新实例,并调用其方法playPauseMusic()
。新的MainActivity
smp
为空,因此访问它会导致NPE
问题是,newmainActivity()代码>不会像您预期的那样返回已经运行的活动实例。更糟糕的是:这不是实例化活动的方式。通常,活动
通过系统解决的意图启动。活动
的所有实例化都由系统完成,这是活动
获取其上下文的唯一方法
如果您需要,请查看如何从广播接收器启动活动
。还要注意,在活动的背景中播放音乐是个坏主意。建议使用服务
。发布堆栈跟踪。