2013-03-28 206 views
0

我想從SD卡提取音頻文件。這裏是我使用的代碼:從SD卡提取音頻文件時出錯

//the URI where I want the query to be performed 
Uri externalAudio = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 

String projection[] = new String[] {"android.provider.MediaStore.Audio.Media.TITLE"}; 
Cursor curExternalAudio = cr.query(externalAudio, projection, null, null, null); 
//code to display result 

錯誤是在最後一行,但它是由投影數組引起的。在logcat中顯示的錯誤如下:

E/AndroidRuntime(1994): Caused by: android.database.sqlite.SQLiteException: near ".": syntax error (code 1): , while compiling: SELECT android.provider.MediaStore.Audio.Media.TITLE FROM audio 

有人可以告訴我這個代碼有什麼問題?

+0

使用'字符串投影[] =新的String [] {MediaStore.Audio.Media .TITLE};'代替'String projection [] = new String [] {「android.provider.MediaStore.Audio.Media.TITLE」};'用於投影參數 – 2013-03-28 07:18:35

+0

謝謝,它解決了這個問題。 但是,你能解釋究竟是什麼導致了錯誤? – Rajat 2013-03-28 07:23:15

+0

當我們傳遞'android.provider.MediaStore.Audio.Media.TITLE'時,意味着我們從'MediaStore'類訪問'TITLE'常量,其中'TITLE'的值是'title',你也可以看到grepcode鏈接,我的答案更爲詳盡 – 2013-03-28 07:31:18

回答

2

當前您通過android.provider.MediaStore.Audio.Media.TITLE作爲投影Array中的列名稱,該列不是有效的列名稱。您需要傳遞值android.provider.MediaStore.Audio.Media.TITLE,這也是ContentProvider中的字符串列名稱。變更投影陣列爲:

String projection[] = new String[] {android.provider.MediaStore.Audio.Media.TITLE}; 
Cursor curExternalAudio = cr.query(externalAudio, projection, null, null, null); 

注: -android.provider.MediaStore.Audio.Media.TITLE

字符串值是 「標題」