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

#android #android-intent #transactiontoolargeexception

#Android #android-намерение #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 with Intent . Таким образом, возможно, что в вашем списке List<PhotoItem> может быть много данных. Таким образом, иногда система может обрабатывать много данных для передачи одновременно. Может быть проблема.

2. Да, это правильно.

3. Но как избежать таких ошибок?

4. Вам следует избегать передачи большого объема данных Intent . Вы можете использовать SharedPreferences для хранения списка вашего массива и получения того же самого для другого действия. Если вам нужно, я добавлю для вас ответ с более подробной информацией об этом.

5. не передавайте огромные данные между действиями, также не передавайте в виде строки, не создавайте разделяемую реализацию или не используйте статические поля или отдельные элементы

Ответ №1:

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

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

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

Комментарии:

1. Если вы согласны, этот ответ полезен, пожалуйста, оцените его.