我使用接口实现了多态,用于调用main活动的函数,但在调用或传递引用期间,它变为null。请帮帮我,我该怎么办?
+ 我在主要活动的onCreate方法中创建了第二个类的对象:
public class PlayerAudioActivity extends Activity implements Listenercalling{
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_player_audio);
MyReceiver mReciever = new MyReceiver();
mReciever.setMyInterface(PlayerAudioActivity.this);
}
public void getplay()
{
Log.d("yeppppppppppppppppp", "jsdhijdiowejd");
if(mp.isPlaying())
{
if(mp!=null)
{
mp.pause();
btnplay.setImageResource(R.drawable.btn_play);
}
}
else
{
if(mp!=null)
{
mp.start();
btnplay.setImageResource(R.drawable.btn_pause);
}
}
}
}
+ 我的界面:
package com.Audio.audioplayer;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.SeekBar;
public interface Listenercalling {
public void getplay();
}
+ 我的第二堂课:
public class MyReceiver extends BroadcastReceiver implements Listenercalling{
private Listenercalling ls;
private static final String TAG = "waaaawoooooooooOOOOOOjnjkhdfku";
public void onReceive(Context context, Intent intent) {
//btnplay=(ImageButton)btnplay;
final String action=intent.getAction();
if(action=="btnplay")
{
getplay();
Log.d(TAG, ""+action);
}
}
public void setMyInterface(PlayerAudioActivity pl)
{
Log.d("wawwwooo"+pl, "lfkero");
ls=pl;
}
@Override
public void getplay() {
Log.d("wawwwooo", "getplayreciever calling");
ls=new PlayerAudioActivity();
ls.getplay();
}
}
+ 错误:
04-25 18:08:25.805: E/AndroidRuntime(30100): FATAL EXCEPTION: main
04-25 18:08:25.805: E/AndroidRuntime(30100): java.lang.RuntimeException: Unable to start receiver com.Audio.audioplayer.MyReceiver: java.lang.NullPointerException
04-25 18:08:25.805: E/AndroidRuntime(30100): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2520)
04-25 18:08:25.805: E/AndroidRuntime(30100): at android.app.ActivityThread.access$1500(ActivityThread.java:156)
04-25 18:08:25.805: E/AndroidRuntime(30100): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1416)
04-25 18:08:25.805: E/AndroidRuntime(30100): at android.os.Handler.dispatchMessage(Handler.java:99)
04-25 18:08:25.805: E/AndroidRuntime(30100): at android.os.Looper.loop(Looper.java:153)
04-25 18:08:25.805: E/AndroidRuntime(30100): at android.app.ActivityThread.main(ActivityThread.java:5299)
04-25 18:08:25.805: E/AndroidRuntime(30100): at java.lang.reflect.Method.invokeNative(Native Method)
04-25 18:08:25.805: E/AndroidRuntime(30100): at java.lang.reflect.Method.invoke(Method.java:511)
04-25 18:08:25.805: E/AndroidRuntime(30100): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
04-25 18:08:25.805: E/AndroidRuntime(30100): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
04-25 18:08:25.805: E/AndroidRuntime(30100): at dalvik.system.NativeStart.main(Native Method)
04-25 18:08:25.805: E/AndroidRuntime(30100): Caused by: java.lang.NullPointerException
04-25 18:08:25.805: E/AndroidRuntime(30100): at com.Audio.audioplayer.PlayerAudioActivity.getplay(PlayerAudioActivity.java:414)
04-25 18:08:25.805: E/AndroidRuntime(30100): at com.Audio.audioplayer.MyReceiver.getplay(MyReceiver.java:138)
04-25 18:08:25.805: E/AndroidRuntime(30100): at com.Audio.audioplayer.MyReceiver.onReceive(MyReceiver.java:28)
04-25 18:08:25.805: E/AndroidRuntime(30100): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2513)
04-25 18:08:25.805: E/AndroidRuntime(30100): ... 10 more
答案 0 :(得分:0)
乍一看,我发现代码存在两个问题。
mp
不是成员变量,也不会传递给您的getPlay
()方法; 你编写代码的方式并没有多大意义。您检查mp.isPlaying()
是否然后检查它是否与null
不同。更好的是。
public void getPlay() {
if (mp != null) {
if (mp.isPlaying() {
mp.pause();
btnplay.setImageResource(R.drawable.btn_play);
} else {
mp.start();
btnplay.setImageResource(R.drawable.btn_pause);
}
}
}
据我所知,NullPointerException可能已经消失,但我认为它还不能正常工作,因为您仍然需要初始化mp
变量。