Android 点击列表项时获取NPE
我在列表视图中列出音频文件并播放一个用户点击过的歌曲,但当用户点击列表中的任何其他歌曲(如果已经播放第一首歌曲)时,我会得到NPEAndroid 点击列表项时获取NPE,android,android-listview,android-mediaplayer,Android,Android Listview,Android Mediaplayer,我在列表视图中列出音频文件并播放一个用户点击过的歌曲,但当用户点击列表中的任何其他歌曲(如果已经播放第一首歌曲)时,我会得到NPE mediaPlayer = new MediaPlayer(); ............................. listview.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick
mediaPlayer = new MediaPlayer();
.............................
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long id) {
strNURL = videoMovieArrayList.get(position).getUrl().toString();
if(mediaPlayer!=null && mediaPlayer.isPlaying())
try {
mediaPlayer.stop();
mediaPlayer.release();
} catch (Exception e) {
}
play(arg1);
}
});
public void play(View view){
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); // NPE
try {
mediaPlayer.setDataSource(strNURL);
} catch (IllegalArgumentException e) {
............
});
}
在try-catch中,您使
mediaPlayer=null
然后调用play方法,在这里您试图将AudioStreamType设置为空值
因此NPE发生了
删除mediaPlayer=null代码>从尝试捕获
在release()之后,该对象不再可用
因此,创建mediaPlayer=newmediaplayer()
然后调用play方法
mediaPlayer.setDataSource(strNURL));
mediaPlayer.setAudioStreamType(AudioManager.STREAM_RING);
mediaPlayer.prepare();
mediaPlayer.start();
问题在于,您可以释放mediaPlayer
对象
if(mediaPlayer!=null && mediaPlayer.isPlaying())
try {
mediaPlayer.stop();
mediaPlayer.release();
} catch (Exception e) {
}
play(arg1);
}
并调用方法play(arg1)
到下一个,但此时您的mediaPlayer
对象将为空,因此您将获得NPE。所以就用这个吧
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long id) {
strNURL = videoMovieArrayList.get(position).getUrl().toString();
if(mediaPlayer!=null)
try {
play(arg1);
} catch (Exception e) {
}
}
});
listview.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共单击(适配器视图arg0,视图arg1,内部位置,
长id){
strNURL=videoMovieArrayList.get(position.getUrl().toString();
如果(mediaPlayer!=null)
试一试{
play(arg1);
}捕获(例外e){
}
}
});
发布日志,然后……在上面创建对象mediaPlayer@MD谢谢我发布了日志请立即检查适配器中的此错误在列表视图中创建coustem适配器请发布MusicTrackActivity的第240行。当前歌曲完成后如何播放下一首歌曲?
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long id) {
strNURL = videoMovieArrayList.get(position).getUrl().toString();
if(mediaPlayer!=null)
try {
play(arg1);
} catch (Exception e) {
}
}
});