Исключение при запуске действия android.os.TransactionTooLargeException: размер пакета данных - PullRequest
0 голосов
/ 19 апреля 2019

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

   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 Ответ

1 голос
/ 19 апреля 2019

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

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

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

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

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

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

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. Вы можете получить свой индекс так же, как вы используете его прямо сейчас.

...