2010-09-29 21 views
2

我正在使用MediaStore.Video.Thumbnails.getThumbnail()方法 獲取我在列表中顯示的文件的縮略圖。這工作 以及開始,但一段時間後,我回來 縮略圖不是匹配的文件。一旦GetThumbnail()開始 失敗它似乎只是一次又一次返回相同的位圖, 無論我嘗試哪個文件。這發生在我的HTC Desire上,運行Android 2.2的 ,並且很難重現 - 它會在一段時間後纔開始發生。Android 2.2 GetThumbnail返回不正確的位圖

這裏是(一個削減的版本)我的源代碼:

static public Bitmap GetThumbnailForFile(File p_File, Activity 
p_activity) 
{ 
    long imageID = GetImageID(p_File, p_activity); 
    if (imageID < 0) 
    { 
     return null; 
    } 
    return 
MediaStore.Images.Thumbnails.getThumbnail(p_activity.getContentResolver(), 
imageID, Thumbnails.MICRO_KIND, null); 
} 

public static long GetImageID(File p_File, Activity p_activity) 
{ 
    long result =-1; 
    Cursor c = 
p_activity.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
     new String[]{MediaStore.Images.Media._ID +""}, 
     MediaStore.Images.Media.DATA +" like '" + p_File.getAbsolutePath(), 
     null, null); 
    c.moveToNext(); 
    if (!c.isAfterLast()) 
    { 
     result = c.getLong(0); 
    } 
    c.close(); 
    return result; 
} 

我也做加載視頻縮略圖同樣的事情。我用 一些調試代碼來檢查由GetImageID(), 返回的值,我很確定它們是正確的。

任何人都可以看到我可能做錯了什麼?或者知道爲什麼 縮略圖在一段時間後無法正常生成?

回答

0

嗯,你的查詢有一個'喜歡',你只有一個'。此外,您不會保護您的查詢免受SQL注入攻擊!

我建議這樣的查詢:

p_activity.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
    new String[]{ MediaStore.Images.Media._ID +"" }, 
    MediaStore.Images.Media.DATA + "=?", 
    new String[]{ p_File.getAbsolutePath() }, 
    null); 

也許這已經是問題。

+0

感謝您的回答!我在那裏有一些代碼,通過用逃脫的等價物替換字符來保護SQL注入。這有點凌亂,所以我拿出來簡化代碼 - 看起來我拿出了其中一個。你在這裏使用的方式更好,所以我會改變我的代碼來做到這一點。我不認爲這會解決我的問題,因爲它似乎總是回來正確。 – Auber 2010-09-30 11:03:09