You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android音乐查询代码报错:Invalid token date_addedDESC问题求助

MediaStore音频查询崩溃问题:定位与修复

崩溃日志

FATAL EXCEPTION: main
Process: com.example.hh, PID: 2858
java.lang.RuntimeException: 无法启动Activity ComponentInfo{com.example.h3mplayer/com.example.hh.MainActivity}: java.lang.IllegalArgumentException: 无效令牌 date_addedDESC
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: java.lang.IllegalArgumentException: 无效令牌 date_addedDESC
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:172)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:142)
at android.content.ContentProviderProxy.query(ContentProviderNative.java:472)
at android.content.ContentResolver.query(ContentResolver.java:1183)
at android.content.ContentResolver.query(ContentResolver.java:1115)
at com.example.h3mplayer.MainActivity.getAllAudio(MainActivity.kt:126)
at com.example.h3mplayer.MainActivity.intializeLayout(MainActivity.kt:110)
at com.example.h3mplayer.MainActivity.onCreate(MainActivity.kt:33)
at android.app.Activity.performCreate(Activity.java:7994)
at android.app.Activity.performCreate(Activity.java:7978)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
 at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
 at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
 at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
 at android.os.Handler.dispatchMessage(Handler.java:106)
 at android.os.Looper.loop(Looper.java:223)
 at android.app.ActivityThread.main(ActivityThread.java:7656)
 at java.lang.reflect.Method.invoke(Native Method)
 at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

错误定位

崩溃根源在getAllAudio方法的第126行:

val cursor = this.contentResolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,projection,selection,null,
MediaStore.Audio.Media.DATE_ADDED + "DESC",null)

此处拼接排序参数时,MediaStore.Audio.Media.DATE_ADDED对应SQL列名date_added,直接拼接"DESC"会生成date_addedDESC,这是无效的SQL排序语法——列名和排序方向之间必须有空格分隔,导致ContentProvider抛出IllegalArgumentException。

修复方案

在"DESC"前添加空格,修正排序参数的拼接:

val selection = MediaStore.Audio.Media.IS_MUSIC + "!=0"
val projection = arrayOf(MediaStore.Audio.Media._ID,MediaStore.Audio.Media.TITLE,MediaStore.Audio.Media.ALBUM, MediaStore.Audio.Media.ARTIST,
    MediaStore.Audio.Media.DURATION,MediaStore.Audio.Media.DATE_ADDED,MediaStore.Audio.Media.DATA)
// 修正排序参数,添加空格分隔列名和排序方向
val cursor = this.contentResolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,projection,selection,null,
MediaStore.Audio.Media.DATE_ADDED + " DESC",null)

补充说明

  • 调用链路:onCreate(第33行)→ intializeLayout(第110行)→ getAllAudio(第126行),崩溃发生在查询MediaStore的环节。
  • 也可以用字符串模板写法提升可读性:"${MediaStore.Audio.Media.DATE_ADDED} DESC",效果相同。

内容的提问来源于stack exchange,提问作者HEMANTH KUMAR RAO M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 11:30:57