在Android的MediaPlayer中获取空指针异常?
我正在努力在媒体播放器中实用地播放铃声。在此之前,我将所有铃声绝对路径存储在SQLite DB中。当我必须播放铃声时,我需要从DB中获取路径并将其转换为URI,然后播放铃声,但在下面代码的第2行中出现空指针异常在Android的MediaPlayer中获取空指针异常?,android,media-player,uri,ringtone,Android,Media Player,Uri,Ringtone,我正在努力在媒体播放器中实用地播放铃声。在此之前,我将所有铃声绝对路径存储在SQLite DB中。当我必须播放铃声时,我需要从DB中获取路径并将其转换为URI,然后播放铃声,但在下面代码的第2行中出现空指针异常 Uri u = Uri.parse(soundpath); player = MediaPlayer.create(this, u); Context con =getApplicationContext(); player.setWakeMode(co
Uri u = Uri.parse(soundpath);
player = MediaPlayer.create(this, u);
Context con =getApplicationContext();
player.setWakeMode(con,PowerManager.PARTIAL_WAKE_LOCK);
player.setVolume(1f, 1f);
player.start();
在调试时,我将变量soundpath的值设置为/content:/media/internal/audio/media/23
请推荐我
已编辑:用于在HASHMAP中存储所有铃声的代码
Ringtone ringtone = ringtoneMgr.getRingtone(currentPosition);
System.out.println(ringtone.getTitle(this));
File uripath=new File(ringtoneMgr.getRingtoneUri(currentPosition).toString());
Toast.LENGTH_LONG).show();
ringtonemap.put(ringtone.getTitle(this), uripath.getAbsolutePath());
arraylist.add(ringtone.getTitle(this));
那个uri看起来不对。它应该是
content://media/internal/audio/media/23
-您是否正确存储了它
确保您正确地存储了它们。如果无法更改它们的存储方式,则在传递到MediaPlayer
soundpath = soundpath.replaceAll("/content:/", "content://");
我正在将URI路径从字符串转换为文件,这不是必需的。 错误发生在路径生成时。 新代码发布如下:
Ringtone ringtone = ringtoneMgr.getRingtone(currentPosition);
System.out.println(ringtone.getTitle(this));
String uri =ringtoneMgr.getRingtoneUri(currentPosition).toString();
Toast.LENGTH_LONG).show();
ringtonemap.put(ringtone.getTitle(this),uri);
arraylist.add(ringtone.getTitle(this));
当我必须播放铃声时:
player = MediaPlayer.create(this, Uri.parse(soundpath));
那个uri看起来不对。它应该是
content://media/internal/audio/media/23
-您是否正确存储了它?我将“content:/media/internal/audio/media/23”作为URI,并将其转换为绝对路径并保存到hashmap。即使是错误的URI也不会导致第2行出现空指针异常。所以我不确定发生了什么。请发布stacktrace和更多mediaplayer创建代码(理想情况下是在什么上下文中,等等)?我想你是对的,我已经复制粘贴了你指定的URI,它现在正在工作。我已经添加了我的答案:)