Android:在recyclerview中使用mediaplayer

Android:在recyclerview中使用mediaplayer,android,android-recyclerview,android-mediaplayer,Android,Android Recyclerview,Android Mediaplayer,我想在“回收器”视图的每个项目中使用mediaplayer。我想在显示特定项目时立即播放音频 我正在努力: public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, final int i) { vhplaymusic = (PersonViewHolderplaymusic) viewHolder; mp = MediaPlayer.create(viewHolder.itemView.getContext()

我想在“回收器”视图的每个项目中使用mediaplayer。我想在显示特定项目时立即播放音频

我正在努力:

public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, final int i) {
vhplaymusic = (PersonViewHolderplaymusic) viewHolder;
mp = MediaPlayer.create(viewHolder.itemView.getContext(), Uri.parse(context.getExternalFilesDir("krishna").getPath() + "/amalharinaam_finalcut_loud.mp3"));
mp.start();
}
在trytrun中,它表示mp为null

错误日志:

E/AndroidRuntime: FATAL EXCEPTION: main
E/AndroidRuntime: Process: com.simha.sacredindaapp, PID: 29281
E/AndroidRuntime: java.lang.NullPointerException
E/AndroidRuntime:     at com.simha.yatras.Myplanshowrvadapter.onBindViewHolder(Myplanshowrvadapter.java:410)
E/AndroidRuntime:     at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:5217)
E/AndroidRuntime:     at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:5250)
E/AndroidRuntime:     at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4487)
E/AndroidRuntime:     at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4363)

要创建新的MediaPlayer,应按以下方式进行:

MediaPlayer mPlayer = new MediaPlayer();
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mPlayer.setDataSource(context.getExternalFilesDir("krishna").getPath() + "/amalharinaam_finalcut_loud.mp3"));
mPlayer.prepareAsync();
使用prepareAsync()在加载音频时不会阻止应用程序,因此我们需要一个回调方法在加载音频后重新生成音频:

mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                        @Override
                        public void onPrepared(MediaPlayer mPlayer) {
                            Common.dismissLoading(progressDialog);
                            if (mPlayer != null) {
                                mPlayer.start();
                            }
                        }
                    });

之后,您可以使用
mPlayer.start()处理暂停和恢复
mPlayer.pause();最后,当您不再需要音频时
mPlayer.release()

使用
Uri.fromFile(File File)
,而不是
Uri.parse
Uri.parse提供文件的正确路径。我不认为这会造成问题。它说mp为空logcat是什么样子的?你有没有在logcat中创建失败的: