I'm trying to allow the user to choose images, and then retain a list of paths to those images for later use.
public class NewEntry extends AppCompatActivity {
private Button selectPhotosButton;
private ImageView imagePreview;
private List<String> imagePaths;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_entry);
imagePreview = findViewById(R.id.imagePreview);
selectPhotosButton = findViewById(R.id.selectPhotosButton);
// Select photo button listener
selectPhotosButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
intent.setAction(Intent.ACTION_GET_CONTENT);
//startActivityForResult(Intent.createChooser(intent, "Select Photos"), PICK_IMAGE_MULTIPLE);
startActivityForResult(intent, 1);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1 && resultCode == RESULT_OK) {
final List<Bitmap> bitmaps = new ArrayList<>();
ClipData clipData = data.getClipData();
if (clipData != null) {
for(int i = 0; i < clipData.getItemCount(); i++){
Uri imageUri = clipData.getItemAt(i).getUri();
imagePaths.add(imageUri.toString());
try {
InputStream is = getContentResolver().openInputStream(imageUri);
Bitmap bitmap = BitmapFactory.decodeStream(is);
bitmaps.add(bitmap);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
} else {
// Only one image
Uri imageUri = data.getData();
imagePaths.add(imageUri.toString());
try {
InputStream is = getContentResolver().openInputStream(imageUri);
Bitmap bitmap = BitmapFactory.decodeStream(is);
bitmaps.add(bitmap);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
new Thread(new Runnable(){
@Override
public void run() {
for(final Bitmap b : bitmaps){
runOnUiThread(new Runnable() {
@Override
public void run() {
imagePreview.setImageBitmap(b);
}
});
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
}
}
However when I try to add the image paths to the imagePaths list object from OnActivityResult it causes the app to crash after clicking the Choose Photos button. How can I retain the list of imagePaths? I need them to store in an SQLite database.