开始活动android.os.TransactionTooLargeException时发生异常:数据包裹大小

时间:2019-04-19 09:29:12

标签: android android-intent 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 个答案:

答案 0 :(得分:1)

您正在通过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变量中拥有列表。您可以像现在使用的一样检索索引。