2013-03-28 209 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

字符串值是 “标题”