2013-08-11 2 views
5

私はthumnailを取得しようとしていますパス、ビットマップオブジェクトではありません。
これらのクエリを実行すると、何らかの理由でサムネイルパスの一部がnullになります。 (私は1028のサムネイル画像をデバイスに持っていますが、カーソルの長さは実際に1028ですが、まだヌルを返しています)私はチェックしたので1028サムネイル画像があることを知っています。 は、ここに私のコードです:サムネイルファイルのパスを取得する

 String[] projection = {MediaStore.Images.Thumbnails._ID}; 
    // Create the cursor pointing to the SDCard 

    cursor = this.getContentResolver().query(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, 
      projection, // Which columns to return 
      null,  // Return all rows 
      null, 
      MediaStore.Images.Thumbnails.IMAGE_ID); 
    // Get the column index of the Thumbnails Image ID 
    Log.d(Global.TAG, "BEFORE"); 
    columnIndex = cursor.getColumnIndex(MediaStore.Images.Thumbnails._ID); 
    Log.d(Global.TAG, "AFTER1"); 
    for(int i =0;i<cursor.getCount();i++){ 
     cursor.moveToPosition(i); 

     Log.d("MyTag","BBABA" + i +" : " + getThumbnailPathForLocalFile(cursor.getLong(columnIndex))); 
    } 
    cursor.close(); 

マイgetThumbnailPathForLocalFile:

String getThumbnailPathForLocalFile(long fileId) 
{ 
    // Log.d(Global., msg) 
    Cursor thumbCursor = null; 
    try 
    { 
     thumbCursor = this.getContentResolver(). 
       query(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI 
       , null 
       , MediaStore.Images.Thumbnails.IMAGE_ID + " = " + fileId+ " AND " 
        + MediaStore.Images.Thumbnails.KIND + " = " 
        + MediaStore.Images.Thumbnails.MINI_KIND , null, null); 

     if(thumbCursor.moveToFirst()) 
     { 
      // the path is stored in the DATA column 
      int dataIndex = thumbCursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA); 
      String thumbnailPath = thumbCursor.getString(dataIndex); 
      return thumbnailPath; 
     } 
    } 
    finally 
    { 
     if(thumbCursor != null) 
     { 
      thumbCursor.close(); 
     } 
    } 

    return null; 
} 

ここに私のlogcatです: http://pastebin.com/UZLZF9Pg

確認した後、私は私が送っIDはちょうどのための指標のようであることがわかりループ。 私のコードがうまく動作するとは思えないので、他のコードも素晴らしいでしょう。

+1

なぜあなたはMediaStore.Images.Thumbnails.DATAをMediaStore.Images.Thumbnails._IDにあなたのPROJECTIONを設定していませんでしたか? –

+0

@IgorGanapolskyわかりません。私はその模範をどこかで取ったと思う。それが問題を解決するかもしれないと思う?とにかく、それはまだ不安です。 – idish

+0

解決策のように{MediaStore.Images.Thumbnails.DATA}を使用したので、私は尋ねていました。あなたが別のアプローチをしていれば、私は興味がありました。 –

答えて

11

MediaStore.Images.Thumbnails.DATAを照会する必要があります。あなたの例を変更するには、次のようになります。

String[] projection = {MediaStore.Images.Thumbnails.DATA}; 
// Create the cursor pointing to the SDCard 

    Cursor cursor = this.getContentResolver().query(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, 
     projection, // Which columns to return 
     null,  // Return all rows 
     null, 
     null); 
// Get the column index of the Thumbnails Image ID 
Log.d(TAG, "BEFORE"); 
int columnIndex = cursor.getColumnIndex(MediaStore.Images.Thumbnails.DATA); 
Log.d(TAG, "AFTER1"); 
for(int i =0;i<cursor.getCount();i++){ 
    cursor.moveToPosition(i); 

    Log.d("MyTag","BBABA" + i +" : " + cursor.getString(columnIndex)); 
} 
cursor.close(); 

参考:How to get imagepath from thumbnail path of a image?

+0

これは素晴らしい、働きます!!!ありがとう、私はこの解決策を探しています:) – idish

+0

こんにちは、うまくいけば、もう少し小さな質問で私を助けることができます:私はすべてのギャラリーの画像を削除してから、カメラで約12枚の画像を取りました。その後、ギャラリーに入り、サムネイルがうまく表示されるのを見ました。しかし、私はそれらのサムネイルを表示するために私のアプリを入力したとき、私は何も参照してください。 DCIMの.Thubnailsフォルダを見た後、jpgファイルはありませんが、10.9 MBの重さの奇妙なファイルが1つしかありません。 .Thumbnailsフォルダにサムネイルが表示されない理由を知っていますか? – idish

+0

@idish別の質問としてそれを開き、詳細(「奇妙なファイル」の名前は何ですか)、電話の詳細、OSのバージョンも提供してください。 – yogurtearl

関連する問題