继续为MediaPlayer获取NullPointerException



我的代码中某处有一个烦人的错误,因此我无法入睡!

有点明白为什么我可能会得到它 - 我认为与我认为onCreate方法有关。

这是我所拥有的:

public class PredefinedUserPlayer extends Activity {
    MediaPlayer mediaPlayer;
    String names;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.userdefplayer);
        names = "http://X.X.X.X/musikz/musikz01.mp3";
        mediaPlayer = new MediaPlayer();
    }
    public void playSelectedFile() {
        mediaPlayer = new MediaPlayer();
        try {
            mediaPlayer.setDataSource(PredefinedUserPlayer.this, Uri.parse(names));
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            mediaPlayer.prepare();
        } catch (IOException e) {
            e.printStackTrace();
        }
        mediaPlayer.start();
    }
}

playSelectedFile()方法正在另一个类中调用,下面是这里的代码:

  view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    PredefinedUserPlayer predefinedUserPlayer = new PredefinedUserPlayer()
                    predefinedUserPlayer.playSelectedFile();
                }
            });

我真的不能在上面的类中拥有MediaPlayer的东西,这就是为什么我不得不实例化PredefinedUserPlayer类。这是实际的堆栈跟踪(也许有人可以帮助我调试并修复这个烦人的错误):

 java.lang.NullPointerException
            at android.content.ContextWrapper.getContentResolver(ContextWrapper.java:99)
            at android.media.MediaPlayer.setDataSource(MediaPlayer.java:882)
            at android.media.MediaPlayer.setDataSource(MediaPlayer.java:859)
            at lukasz.musik.PredefinedUserPlayer.playSelectedFile(PredefinedUserPlayer.java:86)
            at lukasz.musik.CustomMusicAdapter$ViewHolder$1.onClick(CustomMusicAdapter.java:85)
            at android.view.View.performClick(View.java:4240)
            at android.view.View$PerformClick.run(View.java:17721)
            at android.os.Handler.handleCallback(Handler.java:730)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5103)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)

您不能像这样手动创建新活动:

PredefinedUserPlayer predefinedUserPlayer = new PredefinedUserPlayer()

你可以使用 Broadcast 来实现它,像这样:**首先,在PredefinedUserPlayer活动中注册一个广播接收器:

public static String ACTION_PLAY = "ACTION_PLAY_FILE";
private final BroadcastReceiver mPlayFileReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();
        if (ACTION_PLAY.equals(action)) {
              playSelectedFile();
        }
    }
};
IntentFilter intentFilter = new IntentFilter(ACTION_PLAY);
LocalBroadcastManager.getInstance(this).registerReceiver(mPlayFileReceiver,intentFilter);

其次,发送带有动作ACTION_PLAY广播,以通知要调用的接收方:

LocalBroadcastReceiver.getInstance(this).sendBroadcastSync(new Intent(PredefinedUserPlayer.ACTION_PLAY));

相关内容

最新更新