2013-06-28 4 views
1

저는 미디어 플레이어에서 실제적으로 링톤을 연주하기 위해 노력하고 있습니다. 이것 이전에는 이 SQLite DB에 내 모든 RINGTONES 절대 경로를 저장했습니다. 벨소리를 재생해야 할 때 DB에서 경로를 가져와 URI로 변환하고 벨소리를 재생해야하지만 아래 코드 2 행에서 NULL POINTER EXCEPTION이 표시됩니다.Android의 MediaPlayer에서 Null 포인터 예외가 발생합니까?

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의 가치를 얻을 :/미디어/내부/오디오/미디어/23

저를 제안하십시오.

편집 : 코드 해시 맵 URI를 잘 보지 않는

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)); 
+1

하는 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)); 

: 새로운 코드는 아래에 게시됩니다. 그것은'content : // media/internal/audio/media/23'이어야합니다 - 올바르게 저장하고 있습니까? –

+0

'content :/media/internal/audio/media/23'이 URI로 사용되고 절대 경로로 변환하여 hashmap에 저장합니다. –

+0

잘못된 uri조차도 2 번 라인에서 널 포인터 예외를 일으키지 않아야합니다. 그래서 무슨 일이 일어나는지 잘 모르겠습니다. stacktrace를 게시하고 이상적으로 미디어 플레어 작성 코드 (어떤 컨텍스트가 있습니까?)를 게시하십시오. –

답변

1

의 모든 벨소리를 저장하는 데 사용. content://media/internal/audio/media/23이어야합니다. 올바르게 보관하고 있습니까?

제대로 저장했는지 확인하십시오. 그것은 그들이이 저장되는 방법을 변경 할 수없는 경우, 당신은 항상 정확하게 내가 필요하지 않은 한, 파일에 문자열에서 URI 경로를 변환 된 MediaPlayer

soundpath = soundpath.replaceAll("/content:/", "content://"); 
+0

고마워요 켄 울프 –

2

에 전달하기 전에를 포맷 할 수 있습니다. 실수는 경로 생성 시간에 발생했습니다.

player = MediaPlayer.create(this, Uri.parse(soundpath));