簡體   English   中英

album_info不包含album_id列錯誤

[英]album_info does not contain album_id column error

我正在創建一個音樂播放器,用歌曲對象填充數組列表。 每個歌曲對象都有一系列屬性。 其中一個屬性是專輯藝術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=?)

該錯誤實質上表示table album_info不包含album_id列。 但根據該文件, album_info確實有這樣一個專欄。

因此,有一些問題導致您的查詢沒有返回任何內容並拋出該錯誤。

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

  2. 如果可能,您需要在獲得結果時將光標的讀取位置移動到第一個位置。 否則將導致您永遠無法獲得所需的結果

  3. MediaStore在android上運行的方式是你必須注冊你希望操作系統知道的媒體文件 - 這不是自動的。 您需要實現類似於此線程中描述SingleMediaScanner的內容

這是我編寫的代碼的工作位:

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文件,則可以執行以下操作:

    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
        );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM