gpt4 book ai didi

android - album_info does not contain album_id 列错误

转载 作者:行者123 更新时间:2023-11-29 17:30:43 26 4
gpt4 key购买 nike

我正在创建一个音乐播放器,它用歌曲对象填充一个数组列表。每个歌曲对象都有一系列的属性。这些属性之一是专辑封面 URI。

这是我将 URI 属性分配给歌曲对象的代码行。

songObject.albumArtURI = GetAlbumArtURI(albumID); 

这里是albumID的字符串值

Log.v("TAG",String.valueOf(albumID)); // prints [Ljava.lang.String;@44ce53d 

当我将 albumID 传递给 GetAlbumArtURI() 方法时

private String GetAlbumArtURI(String[] albumID){

final Cursor mCursor = getContentResolver().query(
MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,
new String[] {MediaStore.Audio.Albums.ALBUM_ART},
MediaStore.Audio.Albums.ALBUM_ID + "=?",
albumID, // Error
null
);

return mCursor.getString(0);

}

我收到这个错误:

no such column: album_id (code 1)
while compiling:
SELECT album_art FROM album_info WHERE (album_id=?)

错误本质上是说表 album_info不包含 album_id 列。但是根据文档,album_info确实有这样的专栏。

最佳答案

所以有一些问题导致您的查询不返回任何内容并抛出该错误。

  1. MediaStore.Audio.Albums.ALBUM_ID 不是您要引用的列。您应该使用 MediaStore.Audio.Albums._ID

  2. 如果可能,您需要在获得结果时将光标的阅读位置移动到第一个位置。否则将导致您永远无法获得所需的结果

  3. MediaStore 在 android 上的工作方式是您必须注册您希望操作系统知道的媒体文件 - 这不是自动的。您需要实现类似于 SingleMediaScanner described in this thread 的东西

这是我编写的代码的工作部分:

try {
final Cursor mCursor = getContentResolver().query(
MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,
new String[] {MediaStore.Audio.Albums.ALBUM_ART},
MediaStore.Audio.Albums._ID + "=?",
null,
null
);

// You need to check if there are results in your cursor.
// This is like saying if(mCursor.getCount() > 0)
if(mCursor.moveToFirst()) {
return mCursor.getString(mCursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ART));
} else {
return "";
}
} catch (Exception e) {
Log.e(this.getClass().getSimpleName(),e.getMessage());
}

当您调用该代码时,您假设设备上的 MediaStore 知道您下载或添加的音乐文件。您绝对可以实现一个 BroadcastReceiver 来捕获系统事件,例如正在添加的文件,但对于这个答案,我只想展示您如何处理一个已知文件。您还可以通过添加到 onMediaScannerConnected(...) 方法来扩展它以搜索整个目录。

如果您实现 SingleMediaScanner 文件,发现 here然后你可以这样做:

    File file = new File(Environment.getExternalStorageDirectory() + "/Download/1.mp3");
SingleMediaScanner singleMediaScanner = new SingleMediaScanner(this, file);

它会在您的 MediaStore 中注册媒体文件。到那时,您应该能够从上面的查询中得到结果。如果您怀疑歌曲是否被注册,您可以通过将 mCursor 调用更改为此(以获取媒体存储中的所有结果)然后遍历来检查是否添加了任何记录他们:

 final Cursor mCursor = getContentResolver().query(
MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,
null,
null,
null,
null
);

关于android - album_info does not contain album_id 列错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33138006/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com