[英]Using URI with Android MediaPlayer returns “path is null” and NullPointerException
I am trying to set a button inside a RecyclerView
Adapter that play media files that have their URI
stored in a database. 我试图在
RecyclerView
适配器中设置一个按钮,该按钮播放媒体文件,这些文件的URI
存储在数据库中。 I get the URI correctly as the log shows, however, the app crashes and MediaPlayer
does not work. 如日志所示,我正确获取了URI,但是,应用程序崩溃了,
MediaPlayer
无法正常工作。 Here is the AudioAdapter
Code: 这是
AudioAdapter
代码:
public class AdapterAudio extends RecyclerView.Adapter<AdapterAudio.AudioViewHolder> {
public static Context cxt;
private ArrayList<Audio_Model> audioData = new ArrayList<>();
// constructor
public AdapterAudio(ArrayList<Audio_Model> audioData) {
this.audioData = audioData;
}
@Override
public AudioViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.audio_item, parent, false);
AudioViewHolder holder = new AudioViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(final AudioViewHolder holder, final int position) {
Audio_Model item = audioData.get(position);
holder.title.setText(item.getAudio_title());
holder.performer.setText(item.getAudio_content());
}
}
PLAY AUDIO BUTTON 播放音频按钮
holder.playAudio.setOnClickListener(new View.OnClickListener() {
MediaPlayer mediaPlayer = new MediaPlayer();
@Override
public void onClick(View v) {
if (mediaPlayer.isPlaying()) {
pauseMusic();
} else {
playMusic();
}
}
public void playMusic() {
Audio_Model details = audioData.get(position);
String source = details.getAudio_source();
Uri audioUri = Uri.parse(String.valueOf(source));
Log.v("Audio source is: ", String.valueOf(audioUri));
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mediaPlayer.setDataSource(cxt, audioUri);
} catch (Exception e) {
e.printStackTrace();
}
try {
mediaPlayer.prepare();
} catch (Exception e) {
e.printStackTrace();
}
mediaPlayer.start();
}
public void pauseMusic() {
if (mediaPlayer != null) {
mediaPlayer.pause();
}
}
protected void onDestroy() {
if (mediaPlayer != null && mediaPlayer.isPlaying()) {
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null;
}
}
});
Recycler View Methods 回收者查看方法
@Override
public int getItemCount() {
return audioData.size();
}
public class AudioViewHolder extends RecyclerView.ViewHolder {
public final Context context;
public TextView title;
private Audio_Model myAudio;
private int mId;
private TextView performer;
private Button playAudio;
public AzkaryViewHolder(View itemView) {
super(itemView);
context = itemView.getContext();
CardView cardView = (CardView) itemView.findViewById(R.id.audio_item_play);
title = (TextView) itemView.findViewById(R.id.audio_item_title_textViewId);
performer = (TextView) itemView.findViewById(R.id.audio_item_performer_textViewId);
playAudio = (Button) itemView.findViewById(R.id.audio_play);
playAudio.setBackgroundResource(R.drawable.play_pause);
}
}
The Log I am getting with the error message is Below: 我收到错误消息的日志如下:
10-19 20:29:37.698 9693-9693/com.myapp.audioplayer V/MediaPlayer: isPlaying: no active player
10-19 20:29:37.698 9693-9693/com.myapp.audioplayer V/MediaPlayer-JNI: isPlaying: 0
10-19 20:29:37.698 9693-9693/com.myapp.audioplayer V/Audio source is:: content://com.android.providers.media.documents/document/audio%3A17
10-19 20:29:37.698 9693-9693/com.myapp.audioplayer V/MediaPlayer-JNI: native_setup
10-19 20:29:37.698 9693-9693/com.myapp.audioplayer V/MediaPlayer: constructor
10-19 20:29:37.698 9693-9693/com.myapp.audioplayer V/MediaPlayer: setListener
10-19 20:29:37.698 9693-9693/com.myapp.audioplayer V/MediaPlayer-JNI: setAudioStreamType: 3
10-19 20:29:37.698 9693-9693/com.myapp.audioplayer V/MediaPlayer: MediaPlayer::setAudioStreamType
10-19 20:29:37.698 9693-9693/com.myapp.audioplayer I/MediaPlayer: path is null
10-19 20:29:37.698 9693-9693/com.myapp.audioplayer W/System.err: java.lang.NullPointerException
10-19 20:29:37.698 9693-9693/com.myapp.audioplayer W/System.err: at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1031)
10-19 20:29:37.698 9693-9693/com.myapp.audioplayer W/System.err: at android.media.MediaPlayer.setDataSource(MediaPlayer.java:986)
10-19 20:29:37.698 9693-9693/com.myapp.audioplayer W/System.err: at audio.AdapterAudio$1.playMusic(AdapterAudio.java:151)
I appreciate your help in telling me what is wrong in my code that makes MediaPlayer does not work with URI. 感谢您在告诉我代码中有什么问题使MediaPlayer无法使用URI时所提供的帮助。
From what i'm seeing from the log 从我从日志中看到的
source is ::content://com.android.providers.media.documents/document/audio%3A17* 来源是:: content://com.android.providers.media.documents/document/audio%3A17*
The URI returned from the database doesn't seem to be valid 从数据库返回的URI似乎无效
You should verify it again my friend 你应该再次验证我的朋友
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.