启动时出现异常 activity android.os.TransactionTooLargeException: 数据包大小
Exception when starting activity android.os.TransactionTooLargeException: data parcel size
在extra中使用大量数据创建意图
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;
}
然后运行 activity:
startActivity(createIntent(...
应用程序崩溃并出现错误:
Exception when starting activity android.os.TransactionTooLargeException: data parcel size...
当列表中的数据太大时,如何避免此类错误?
您正在通过 Intent
将整个 List<PhotoItem>
传递给您的 GalleryViewActivity
。因此,您的 List<PhotoItem>
列表可能包含很多数据。所以有时系统无法一次处理太多数据传输。
请避免使用Intent传递大量数据。
您可以使用 SharedPreferences
来存储您的数组列表并在其他 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());
您将在 listGallery 变量中拥有您的列表。您可以像现在一样检索索引。
在extra中使用大量数据创建意图
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;
}
然后运行 activity:
startActivity(createIntent(...
应用程序崩溃并出现错误:
Exception when starting activity android.os.TransactionTooLargeException: data parcel size...
当列表中的数据太大时,如何避免此类错误?
您正在通过 Intent
将整个 List<PhotoItem>
传递给您的 GalleryViewActivity
。因此,您的 List<PhotoItem>
列表可能包含很多数据。所以有时系统无法一次处理太多数据传输。
请避免使用Intent传递大量数据。
您可以使用 SharedPreferences
来存储您的数组列表并在其他 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());
您将在 listGallery 变量中拥有您的列表。您可以像现在一样检索索引。