Исключение при запуске действия android.os.TransactionTooLargeException: размер пакета данных

Создание намерения с большим количеством данных в дополнениях

   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;
   }

Затем запустим упражнение:startActivity(createIntent(...

вылетает приложение с ошибкой:

Exception when starting activity android.os.TransactionTooLargeException: data parcel size...

Как избежать таких ошибок, когда данные слишком велики в списке?

1 ответ

Решение

Вы проходите целое List<PhotoItem> на ваш GalleryViewActivity с Intent, Так что вполне возможно, что ваш список List<PhotoItem> может иметь много данных. Поэтому иногда система не может обрабатывать много данных для передачи за один раз.

Пожалуйста, избегайте передачи большого количества данных с помощью Intent.

Ты можешь использовать SharedPreferences сохранить ваш список массивов и получить то же самое в другой деятельности.

Инициализируйте ваши SharedPreferences, используя:

SharedPreferences prefrence =  PreferenceManager.getDefaultSharedPreferences(context);
Editor editor = prefrence.edit();

Вы можете использовать этот способ для сохранения списка в переменной Preference

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;
}

Теперь в вашем файле GalleryViewActivity.java

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());

Вы будете иметь свой список в переменной listGallery. Вы можете получить свой индекс так же, как вы используете сейчас.

Другие вопросы по тегам