当前位置: 首页 > 知识库问答 >
问题:

通过意图附加[重复]发送大数据时的异常

花欣然
2023-03-14

在我的应用程序中,我通过Intentextras向我的活动发送数据。

在我的特定情况下,我下载一个JSON文件,将其内容转换为字符串,并将其作为Intent额外文件发送到我的活动。大小约为500kB。

我得到了一个TransactionTooLargeException

09-28 13:40:46.647: E/JavaBinder(441): !!! FAILED BINDER TRANSACTION !!!
09-28 13:40:46.647: W/ActivityManager(441): Exception in new application when starting activity com.vektor.sourfer/.SourceActivity
09-28 13:40:46.647: W/ActivityManager(441): android.os.TransactionTooLargeException
09-28 13:40:46.647: W/ActivityManager(441):     at android.os.BinderProxy.transact(Native Method)
09-28 13:40:46.647: W/ActivityManager(441):     at android.app.ApplicationThreadProxy.scheduleLaunchActivity(ApplicationThreadNative.java:723)
09-28 13:40:46.647: W/ActivityManager(441):     at com.android.server.am.ActivityStack.realStartActivityLocked(ActivityStack.java:716)
09-28 13:40:46.647: W/ActivityManager(441):     at com.android.server.am.ActivityManagerService.attachApplicationLocked(ActivityManagerService.java:4341)
09-28 13:40:46.647: W/ActivityManager(441):     at com.android.server.am.ActivityManagerService.attachApplication(ActivityManagerService.java:4405)
09-28 13:40:46.647: W/ActivityManager(441):     at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:390)
09-28 13:40:46.647: W/ActivityManager(441):     at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:1737)
09-28 13:40:46.647: W/ActivityManager(441):     at android.os.Binder.execTransact(Binder.java:388)
09-28 13:40:46.647: W/ActivityManager(441):     at dalvik.system.NativeStart.run(Native Method)
09-28 13:40:46.647: W/ActivityManager(441): Force removing ActivityRecord{421bbed8 u0 com.vektor.sourfer/.SourceActivity}: app died, no saved state

在这种情况下,哪种方法是绕过此错误的最佳方法?

共有3个答案

尹善
2023-03-14

第一种方法:因为你使用的是Json,所以使用JsonReader

https://sites.google.com/site/gson/streaming

此代码读取包含消息数组的JSON文档。它以流的形式遍历数组元素,以避免将完整文档加载到内存中。它是简洁的,因为它使用Gson的对象模型来解析单个消息:

public List<Message> readJsonStream(InputStream in) throws IOException {
    JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
    List<Message> messages = new ArrayList<Message>();
    reader.beginArray();
    while (reader.hasNext()) {
        Message message = gson.fromJson(reader, Message.class);
        messages.add(message);
    }
    reader.endArray();
    reader.close();
    return messages;
}

第二种方法:保存文件并将文件URI/path传递给第二个活动。

冯新知
2023-03-14

传输的数据大小有1MB的限制,但它实际上更小,并且是特定于设备的。你是如何传输这个字符串的?通过putExtra(字符串)方法?您应该尝试将其包装为可序列化的,因为如果可能的话,每个字符只使用一个字节会做一些聪明的事情。但是,如果您的字符串可能大于此值,那么您就太接近限制,因此您应该将其保存到磁盘,而不进行任何传输。

我写了一篇关于这个主题的博客文章,对任何得到这个例外的人来说都可能很有趣。

慕鹏
2023-03-14

一种解决方案是将数据保存到公共静态成员变量中,然后从第二个活动访问它。

另一种解决方案是将结果保存到外部存储器上的文件中,然后从该文件中读取。

 类似资料:
  • 我正在使用一个外部api,在这里我得到了与该api相关的以下详细信息 我计划做的是: 我将通过codeigniter表单从用户收集数据,然后将数据转发到上述api,并从api获得响应,因此,如果成功,则将执行进一步的操作,否则需要显示错误消息 然而,出于测试目的,我使用了一个静态数组,并试图将其发送到api。 实际上发生的是,我得到了一个空白的结果,所以不确定它是否有效。 下面是我的代码 PS:我

  • 问题内容: 在我的开发环境中,我有两个服务器。一个通过http请求将图像发送给另一个。 客户端服务器执行以下操作: 收到请求的服务器执行以下操作: 如果我发送小图像,则效果很好。但是,如果我发送了较大的图像,尽管文件保存正确,则仅显示图像的第一上部。其余为黑色。图像尺寸正确。 我想这只是文件中写入的图像的第一块。我尝试创建一个和一个,但似乎不起作用: 我可以直接从二进制数据流传输到文件吗?对于我所

  • 我正在尝试使用不同的应用程序附加图像,代码如下: 附加的图像是使用以下代码生成的: 但当我试图打开GMAIL与此意图,只有文本显示应用程序与错误:. 我错过了什么? 编辑 这是另一个解决方案:android。操作系统。FileUrieExposedException:文件。jpg通过ClipData曝光了app之外的内容。项目getUri()

  • 问题内容: 我有一个内置的javascript,它可以执行以下操作:通过ajax-> php-> sql获取内容,并在单击内容后在index.php上显示它,将显示新内容。 现在,我想拥有一个在将内容单击到php之后发送数据的函数,该函数将在db中执行某些操作。如何创建将发送数据的功能?谢谢! 这是我的显示内容的代码: }); }` 问题答案: 您可以通过在jQuery.ajax 设置中包含值,将

  • 我的会发出一个,当用户单击它时启动我的。 这看起来是这样的: 如您所见,应该具有额外的,其值为放在中。 当我单击“现在”这个时,我总是得到作为的值 这是我在中获取值的方式: 日志: 总是有值,我做错了什么? 这样就解决了问题:https://stackoverflow.com/a/18049676/2180161 报价: http://developer.android.com/reference

  • 所以我试图通过ajax将图像作为一个blob发送。blob的类型正确,大小约为4.5 kb。我试着这样发送: 接收页面看起来像这样: 它告诉我找不到索引“图像”。所以不仅数据没有发送,甚至索引也被省略了。我做错了什么? 编辑: toBlob和toDataURL都不会产生任何东西,只是一个空的PNG。有没有办法将数据从帧缓冲区转换成Base64编码的jpg或png?