Creating intent with a large amount of data in extras
public static Intent createIntent(Context context, List<PhotoItem> gallery, int indexOf) {
Intent intent = new Intent(context, GalleryViewActivity.class);
intent.putExtra(EXTRA_PHOTO_INDEX, indexOf);
intent.putExtra(EXTRA_PHOTO_OBJECT, new Gson().toJson(gallery));
return intent;
}
Then running the activity:
startActivity(createIntent(...
crashes application with error:
Exception when starting activity android.os.TransactionTooLargeException: data parcel size...
How to avoid such errors when data is too large in the list?
You are passing whole List<PhotoItem>
to your GalleryViewActivity
with Intent
. So it might possible that your list of List<PhotoItem>
can have many data. So sometime system can not handle much data to transfer at a time.
Please avoid to pass large amount of data with Intent.
You can use SharedPreferences
to store your array list and retrieve the same on other activity.
Initialize your SharedPreferences using:
SharedPreferences prefrence = PreferenceManager.getDefaultSharedPreferences(context);
Editor editor = prefrence.edit();
You can use this way to store list in Preference variable
public static Intent createIntent(Context context, List<PhotoItem> gallery, int indexOf) {
Intent intent = new Intent(context, GalleryViewActivity.class);
intent.putExtra(EXTRA_PHOTO_INDEX, indexOf);
editor.putString("GallaryData", new Gson().toJson(gallery));
editor.commit();
return intent;
}
Now in your GalleryViewActivity.java file
SharedPreferences prefrence = PreferenceManager.getDefaultSharedPreferences(context);
Editor editor = prefrence.edit();
String galleryData = prefrence.getString("GallaryData", "");
List<PhotoItem> listGallery = new Gson().fromJson(galleryData, new TypeToken<List<PhotoItem>>() {}.getType());
You will have your list in listGallery variable. You can retrieve your index as the same way you are using right now.