I have this function that queries the gallery images
public void getImagesFromGallary(Context context) {
List<Uri> imagesUri = new ArrayList<>();
List<Uri> imageOrientationUri = new ArrayList<>();
Cursor imageCursor = null;
try {
final String[] columns = {MediaStore.Images.Media.DATA, MediaStore.Images.ImageColumns.ORIENTATION};
final String orderBy = MediaStore.Images.Media.DATE_ADDED + " DESC";
imageCursor = context.getApplicationContext().getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null, null, orderBy);
while (imageCursor.moveToNext()) {
Uri uri = Uri.parse(imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA)));
Uri uriOrientation = Uri.parse(imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.ORIENTATION)));
imagesUri.add(uri);
imageOrientationUri.add(uriOrientation);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (imageCursor != null && !imageCursor.isClosed()) {
imageCursor.close();
}
}
}
Do I have to have two Uri list for this, for instance I have a
imagesUri list and a imageOrientationUri list.
What if I want more information from the Image do I have to parse another Uri from the cursor?
You can create an object for the image like:
public class ImageDetails {
private URI imageURI;
private URI imageOrientationURI;
public URI getImageURI() {
return imageURI;
}
public void setImageURI(URI imageURI) {
this.imageURI = imageURI;
}
public URI getImageOrientationURI() {
return imageOrientationURI;
}
public void setImageOrientationURI(URI imageOrientationURI) {
this.imageOrientationURI = imageOrientationURI;
}
}
And you create a single list and add details to it like:
public void getImagesFromGallary(Context context) {
List<ImageDetails> imageDetails = new ArrayList<>();
Cursor imageCursor = null;
try {
final String[] columns = {MediaStore.Images.Media.DATA, MediaStore.Images.ImageColumns.ORIENTATION};
final String orderBy = MediaStore.Images.Media.DATE_ADDED + " DESC";
imageCursor = context.getApplicationContext().getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null, null, orderBy);
while (imageCursor.moveToNext()) {
ImageDetails tmp = new ImageDetails();
tmp.setImageURI(Uri.parse(imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.ORIENTATION))));
tmp.setImageOrientationURI(Uri.parse(imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA))));
imageDetails.add(tmp);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (imageCursor != null && !imageCursor.isClosed()) {
imageCursor.close();
}
}
So for each new property now, you can create a new variable in the class along with the getters and setters