2013-06-28 82 views
1

我正在努力在媒體播放器中實實在在地玩RINGTONES。在此之前,我有SQLite DB中存儲我所有的RINGTONES絕對路徑。當我必須播放鈴聲時,我需要從DB獲取路徑並將其轉換爲URI並播放鈴聲,但我在下面的代碼的第2行中獲得了NULL POINTER EXCEPTION。在Android中MediaPlayer中獲取空指針異常?

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(); 

在調試,我得到可變和聲的價值/內容:/媒體/內部/音頻/媒體/ 23

請給我建議。

EDITED:代碼用於所有的鈴聲存儲在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)); 
+1

這個URI看起來不正確的。它應該是'content:// media/internal/audio/media/23' - 你正確存儲它嗎? –

+0

我將'content:/ media/internal/audio/media/23'作爲URI並將其轉換爲絕對路徑並將其保存爲hashmap。 –

+0

即使錯誤的uri也不應該在第2行中引起空指針異常。所以我不確定發生了什麼。請發佈堆棧跟蹤,理想情況下更多的mediaplayer創建代碼(它是什麼上下文等)? –

回答

1

這個URI看起來不正確的。它應該是content://media/internal/audio/media/23 - 你是否正確地存儲它?

確保您正確存儲它們。如果這是不可能的,他們是如何存儲的變化,可以隨時傳遞給MediaPlayer

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

非常感謝Ken Wolf –

2

我是從字符串轉換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));