2017-01-10 4 views
0

私はこの関数を持っています。これはアルバムのリストを与えるはずですが、buck_display_name(s)でも繰り返し値を返しています。私は多くのことを検索しましたが、任意の助けを見つけることができませんでした:contentResolverがMediaProviderから別のデータを返さない

String[] projection = {"Distinct "+MediaStore.Images.Media.BUCKET_ID, 
      MediaStore.Images.Media._ID, 
      MediaStore.Images.Media.DATA, 
      MediaStore.Images.Media.BUCKET_DISPLAY_NAME 
    }; 
    cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,projection,null,null,"bucket_display_name ASC"); 
    Log.i("ResultCount",String.valueOf(cursor.getCount())); 

    int i=0; 
    _ALBUM_IDs = new ArrayList<>(); 
    URIs = new ArrayList<>(); 
    _IDs = new ArrayList<>(); 
    _ALBUM_NAMES = new ArrayList<>(); 
    while (cursor.moveToNext()){ 
     Log.i("Row",String.valueOf(i)); 
     for (int j=0;j<cursor.getColumnCount();j++){ 
      Log.i("Column "+j,cursor.getColumnNames()[j]+", value: "+cursor.getString(j)); 
     } 
     _ALBUM_IDs.add(cursor.getString(0)); 
     _IDs.add(cursor.getString(1)); 
     URIs.add(cursor.getString(2)); 
     _ALBUM_NAMES.add(cursor.getString(3)); 
     i++; 
    } 

ネストされたループからの出力:あなたはbucket_id、bucket_display_nameの繰り返される値がある見ることができます

I/ResultCount: 6 
I/Row: 0 
I/Column 0: bucket_id, value: -2075821635 
I/Column 1: _id, value: 43 
I/Column 2: _data, value: /storage/emulated/0/DCIM/DSC_0339.jpg 
I/Column 3: bucket_display_name, value: DCIM 
I/Row: 1 
I/Column 0: bucket_id, value: -2075821635 
I/Column 1: _id, value: 44 
I/Column 2: _data, value: /storage/emulated/0/DCIM/DSC_0934.jpg 
I/Column 3: bucket_display_name, value: DCIM 
I/Row: 2 
I/Column 0: bucket_id, value: -2075821635 
I/Column 1: _id, value: 45 
I/Column 2: _data, value: /storage/emulated/0/DCIM/DSC_2057m.jpg 
I/Column 3: bucket_display_name, value: DCIM 
I/Row: 3 
I/Column 0: bucket_id, value: -2075821635 
I/Column 1: _id, value: 46 
I/Column 2: _data, value: /storage/emulated/0/DCIM/DSC_2132.jpg 
I/Column 3: bucket_display_name, value: DCIM 
I/Row: 4 
I/Column 0: bucket_id, value: -2075821635 
I/Column 1: _id, value: 47 
I/Column 2: _data, value: /storage/emulated/0/DCIM/DSC_4258.jpg 
I/Column 3: bucket_display_name, value: DCIM 
I/Row: 5 
I/Column 0: bucket_id, value: 902704159 
I/Column 1: _id, value: 63 
I/Column 2: _data, value: /storage/emulated/0/DataSync/DSC_0249.jpg 
I/Column 3: bucket_display_name, value: DataSync 

。どうしてこれなの?ありがとうございました。

答えて

0

_idの値は異なるため、関数は正しく動作します。

ContentResolver.query()の方法では、コンテンツプロバイダが実際にそのデータソースを提供していない限り、特定の列の個別の値をフィルタリングすることはできません(GROUP BYが必要です)。 結果を手動でフィルタリングする必要があります。

+0

'_id'は明らかに区別されます。なぜなら、この列はおそらく何らかの種類のPRIMARY KEYです。とにかくお返事いただきありがとうございます。GROUP BY –

+0

について実際に私はハッシュセットを使用して手動で結果をフィルタリングしましたが、性能面でより良い結果が得られるため、結果をデータベースから取り出すことを望みました。 –

関連する問題