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

开发音乐播放器时遇LoaderCallbacks未重写方法及Loader<Cursor>错误,如何解决?

解决音乐播放器中LoaderCallbacks编译错误及Support Library Loader类型不匹配问题

嘿,我帮你梳理下遇到的这两个问题,本质都是Support库与原生Android API的Loader类混用,再加上代码里重复实现回调方法导致的:

错误原因拆解

  • 第一个编译错误:你重复写了onLoadFinished和onLoaderReset方法,其中一组用的是原生Loader<Cursor>,另一组用的是Support库的android.support.v4.content.Loader<Cursor>,这让编译器判定你没有正确实现LoaderManager.LoaderCallbacks<Cursor>接口的所有抽象方法——接口要求方法参数类型必须完全统一。
  • 第二个Loader错误:使用getSupportLoaderManager()时,必须全程使用Support库的Loader相关类,原生Loader和Support库的Loader是完全不同的类,混用必然导致类型不兼容。

修正后的代码

删除重复的回调方法,统一使用Support库的Loader类,修正后的代码如下:

private void getAudioListFromMediaDatabase() {
    getSupportLoaderManager().initLoader(LOADER_ID, null, new android.support.v4.app.LoaderManager.LoaderCallbacks<Cursor>() {
        
        @Override
        public android.support.v4.content.Loader<Cursor> onCreateLoader(int id, Bundle args) {
            Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
            String[] projection = new String[]{
                    MediaStore.Audio.Media._ID,
                    MediaStore.Audio.Media.TITLE,
                    MediaStore.Audio.Media.ARTIST,
                    MediaStore.Audio.Media.ALBUM,
                    MediaStore.Audio.Media.ALBUM_ID,
                    MediaStore.Audio.Media.DURATION,
                    MediaStore.Audio.Media.DATA
            };
            String selection = MediaStore.Audio.Media.IS_MUSIC + " = 1";
            String sortOrder = MediaStore.Audio.Media.TITLE + " COLLATE LOCALIZED ASC";
            // 务必使用Support库的CursorLoader
            return new android.support.v4.content.CursorLoader(getApplicationContext(), uri, projection, selection, null, sortOrder);
        }

        @Override
        public void onLoadFinished(android.support.v4.content.Loader<Cursor> loader, Cursor data) {
            mAdapter.swapCursor(data);
        }

        @Override
        public void onLoaderReset(android.support.v4.content.Loader<Cursor> loader) {
            mAdapter.swapCursor(null);
        }
    });
}

额外注意事项

  • 检查你的导入语句,确保所有Loader相关类都来自android.support.v4.content或android.support.v4.app包,不要导入原生的android.content.Loader或android.app.LoaderManager。
  • 如果项目已经迁移到AndroidX,对应的包要换成androidx.loader.content和androidx.loader.app,替换旧的Support库包即可。

内容的提问来源于stack exchange,提问作者dd hold

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:21:36