android.os.TransactionTooLargeException:数据包大小NOUGAT错误

Wan*_*erd 2 java android exception parcelable transactiontoolargeexception

我正在使用RETROFIT进行api调用,我从服务器接收到JSON响应,该响应的大小几乎不超过30kb。JSON将响应解析为复杂的Object时,会引发此错误。

java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 1098852 bytes
    at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:161)
    at android.os.Handler.handleCallback(Handler.java:883)
    at android.os.Handler.dispatchMessage(Handler.java:100)
    at android.os.Looper.loop(Looper.java:214)
    at android.app.ActivityThread.main(ActivityThread.java:7356)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
 Caused by: android.os.TransactionTooLargeException: data parcel size 1098852 bytes
    at android.os.BinderProxy.transactNative(Native Method)
    at android.os.BinderProxy.transact(BinderProxy.java:510)
    at android.app.IActivityTaskManager$Stub$Proxy.activityStopped(IActivityTaskManager.java:4524)
    at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:145)
    at android.os.Handler.handleCallback(Handler.java:883) 
    at android.os.Handler.dispatchMessage(Handler.java:100) 
    at android.os.Looper.loop(Looper.java:214) 
    at android.app.ActivityThread.main(ActivityThread.java:7356) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Run Code Online (Sandbox Code Playgroud)

如果尝试将响应存储在Object类中,然后通过LinkedHashMap获取值,则可以获取数据。但是,这将是一个乏味的过程。

谁能帮助我找出问题所在以及如何找到解决方案?

根据我的研究,这仅适用于版本> = Nougat的android设备。在此之下,它像小菜一碟。

我也尝试了以下提到的一些解决方案:-> onSaveInstanceState.clear()-但这不起作用。 你可以在这里找到帖子

toa*_*ran 6

当您将大量数据放入Android 捆绑包时,这是典型的错误。

我建议你做对了。大数据必须持久存储到磁盘(数据库或文件),并且您仅将对这些数据的引用传递给其他地方以使用它。

在这里您可能会发现30kb很小,但是Bundle大小限制的实际配置可能因不同的设备/供应商配置而异。

该捆绑包仅用于保存简单而小的数据,请勿过度使用。