2

メソッドを使用してMediaStore.Video.Thumbnails.getThumbnail()、リストに表示しているファイルのサムネイルを取得しています。これは最初はうまく機能しますが、しばらくすると返されるサムネイルはファイルと一致するものではありません。GetThumbnail()失敗し始めると、どのファイルを試しても、同じビットマップのみが何度も返されるようです。これは、Android 2.2 を実行している私の HTC Desire で発生し、再現が非常に困難です。しばらくすると発生し始めます。

これが私のソースコード(のカットバックバージョン)です:

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() によって返された値を検査するためにいくつかのデバッグ コードを使用しましたが、それらが正しいことを確信しています。

誰かが私が間違っているかもしれないことを見ることができますか? または、しばらくするとサムネイルが適切に生成されなくなる理由を知っていますか?

4

1 に答える 1

0

うーん、あなたのクエリには「いいね」が含まれていますが、「」は 1 つしかありません。さらに、クエリを 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);

多分それはすでに問題でした。

于 2010-09-29T10:10:37.437 に答える