Ich habe diese Funktion, die die Liste der Alben oder buck_display_name (s) geben soll, aber es gibt wiederholte Wert zurück. Ich habe viel gesucht, aber konnte keine Hilfe finden:contentResolver gibt keine eindeutigen Daten von MediaProvider zurück
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++;
}
Die Ausgabe von der verschachtelten Schleife:
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
Sie sehen können gibt es wiederholt Werte von bucket_id, bucket_display_name. Warum ist das? Vielen Dank.
die '_id' sind offensichtlich verschieden, weil hier diese Spalte wahrscheinlich eine Art PRIMARY KEY ist. Wie auch immer, danke für Ihre Antwort, können Sie eine Idee über GROUP BY –
eigentlich ich habe das Ergebnis manuell mit Hilfe von Hash-Sets, aber ich wollte weniger Ergebnis aus der Datenbank holen, weil es in Bezug auf die Leistung besser wäre. –