Android 打开PDF-s、XLS、DOC时事务太大

Android 打开PDF-s、XLS、DOC时事务太大,android,android-studio,pdf,kotlin,document,Android,Android Studio,Pdf,Kotlin,Document,我的应用程序的一部分是以bytearray的形式显示设备从服务器接收的文档。我使用Intent.ACTION_视图解决了这个问题,但它显示了一个错误,即事务太大,因为文件大约有9MB 我读过关于这个错误的文章,几乎是不言自明的。是否有办法将此bytearray保存为本地文件并仅传递到所需应用程序的路径?我怎样才能解决这个问题 另外,我可以使用Apache库在应用程序中呈现这些文件吗 代码: 错误: java.lang.RuntimeException: android.os.Transactio

我的应用程序的一部分是以bytearray的形式显示设备从服务器接收的文档。我使用Intent.ACTION_视图解决了这个问题,但它显示了一个错误,即事务太大,因为文件大约有9MB

我读过关于这个错误的文章,几乎是不言自明的。是否有办法将此bytearray保存为本地文件并仅传递到所需应用程序的路径?我怎样才能解决这个问题

另外,我可以使用Apache库在应用程序中呈现这些文件吗

代码:

错误:

java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 996448 bytes
    at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:160)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:214)
    at android.app.ActivityThread.main(ActivityThread.java:7078)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)
 Caused by: android.os.TransactionTooLargeException: data parcel size 996448 bytes
    at android.os.BinderProxy.transactNative(Native Method)
    at android.os.BinderProxy.transact(Binder.java:1145)
    at android.app.IActivityManager$Stub$Proxy.activityStopped(IActivityManager.java:3891)
    at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:144)

“我使用Intent.ACTION\u视图解决了这个问题,但它显示了一个错误,即事务太大,因为文件大约有9MB”--您没有在
Intent
中传递PDF。您在
Intent
中传递一个指向PDF的
Uri
。“是否有方法将此bytearray保存为本地文件并仅传递到所需应用程序的路径?”--将
字节[]
保存到
getCacheDir()
中的文件中(方法可在
上下文
子类上获得),然后使用
FileProvider
获取一个
Uri
,您可以通过
ACTION\u VIEW
将其交给其他应用程序。编辑:我添加了代码。我正在传递Uri,它会抛出错误。我该怎么办?您正在调用
setDataAndType()
两次。第一次,您提供的是来自
FileProvider
Uri
。第二次,您传递的是
Uri.fromFile(file)
。尚不清楚
文件是什么。无论如何,不管它是什么,它都太大了,第二个
setDataAndType()
调用会清除第一个。尝试删除第二个
setDataAndType()
调用。我认为android正在试图保存来自服务器的捆绑数据,太大了。我如何处理?我无法回答这个问题,因为我不知道你在应用程序中的何处保存来自服务器的数据。但您可能是对的--
TransactionTooLargeException
可能来自已保存的实例状态
Bundle
,而不是来自
Intent
“我使用Intent.ACTION\u视图解决了这个问题,但它显示了一个错误,表示事务太大,因为文件大约有9MB。”--您没有在
Intent
中传递PDF。您在
Intent
中传递一个指向PDF的
Uri
。“是否有方法将此bytearray保存为本地文件并仅传递到所需应用程序的路径?”--将
字节[]
保存到
getCacheDir()
中的文件中(方法可在
上下文
子类上获得),然后使用
FileProvider
获取一个
Uri
,您可以通过
ACTION\u VIEW
将其交给其他应用程序。编辑:我添加了代码。我正在传递Uri,它会抛出错误。我该怎么办?您正在调用
setDataAndType()
两次。第一次,您提供的是来自
FileProvider
Uri
。第二次,您传递的是
Uri.fromFile(file)
。尚不清楚
文件是什么。无论如何,不管它是什么,它都太大了,第二个
setDataAndType()
调用会清除第一个。尝试删除第二个
setDataAndType()
调用。我认为android正在试图保存来自服务器的捆绑数据,太大了。我如何处理?我无法回答这个问题,因为我不知道你在应用程序中的何处保存来自服务器的数据。但您可能是对的--
TransactionTooLargeException
可能来自已保存的实例状态
Bundle
,而不是来自
Intent
java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 996448 bytes
    at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:160)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:214)
    at android.app.ActivityThread.main(ActivityThread.java:7078)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)
 Caused by: android.os.TransactionTooLargeException: data parcel size 996448 bytes
    at android.os.BinderProxy.transactNative(Native Method)
    at android.os.BinderProxy.transact(Binder.java:1145)
    at android.app.IActivityManager$Stub$Proxy.activityStopped(IActivityManager.java:3891)
    at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:144)