- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
背景
大家好。我正在制作一个应用程序,它有一个主要 Activity 和一个自定义对象列表。每个项目显示一张图片、一个标题和一个副标题,所有这些都取自该项目的对象属性。
在应用程序的第一个版本中,当一个项目被点击时,对象被作为 Parcelable
和一个 Intent
发送到另一个 Activity ,它显示了所有属性对象有,包括图像。当时图片的属性只有图片的Resources
ID,所以我只需要加载那个ID的图片即可。
在我当前的版本中,我添加了一个新 Activity ,允许用户设置对象信息以便将新对象添加到主 Activity 列表中。但是,用户从图库中选择图像。为了面对这种情况,我将初始 ID 属性更改为 Drawable
,这样我就可以直接分配 Resources
图片和 Gallery 挑选的图片。
这给了我一个 FAILED BINDER TRANSACTION
错误,所以我决定将图像保存为 byte[]
以避免这种情况。
现状和问题
我的自定义对象构造函数获取 Drawable
并使用以下方法将其转换为 byte[]
:
private byte[] drawableToBytes(Drawable img)
{
ByteArrayOutputStream stream = new ByteArrayOutputStream();
((BitmapDrawable)img).getBitmap().compress(Bitmap.CompressFormat.PNG, 50, stream);
return stream.toByteArray();
}
为了从 Parcelable
中获取对象,我使用了以下方法:
public CentroMando(Parcel in)
{
String[] datos = new String[11];
in.readStringArray(datos);
this.setAbreviatura(datos[0]);
this.setNombre(datos[1]);
this.setImagenBytes(Base64.decode(datos[2], Base64.DEFAULT)); // <----- Image
this.setLugar(new Lugar(datos[3],
Double.parseDouble(datos[4]),
Double.parseDouble(datos[5]),
Double.parseDouble(datos[6])));
this.setComandante(datos[7]);
this.setEnlaceCentroMando(datos[8]);
this.setEnlaceLocalizacion(datos[9]);
this.setEnlaceComandante(datos[10]);
}
将对象转换为Parcelable
:
public void writeToParcel(Parcel dest, int flags)
{
dest.writeStringArray(new String[]
{
this.getAbreviatura(),
this.getNombre(),
Base64.encodeToString(this.getImagenBytes(), Base64.DEFAULT), // <----- Image
this.getLugar().getNombre(),
String.valueOf(this.getLugar().getLatitud()),
String.valueOf(this.getLugar().getLongitud()),
String.valueOf(this.getLugar().getDireccion()),
this.getComandante(),
this.getEnlaceCentroMando(),
this.getEnlaceLocalizacion(),
this.getEnlaceComandante()
});
}
要从 byte[]
获取 Drawable
,我使用以下代码:
public Drawable getImagenBytesDrawable()
{
byte[] datosBitmap = this.getImagenBytes();
Bitmap imagenBitmap = BitmapFactory.decodeByteArray(datosBitmap, 0, datosBitmap.length);
return new BitmapDrawable(imagenBitmap);
}
现在,当我单击 ListView
中的项目时,一些加载没有任何问题并且显示图像和属性正常,但其余的关闭应用程序,Logcat 上没有任何错误。我必须删除 Logcat 中的过滤器才能真正找到问题:
2019-11-14 01:33:18.287 2110-14522/? E/ActivityManager: Transaction too large, intent: Intent { cmp=com.example.ud4_propuesto_1/.DatosCentroMandoActivity (has extras) }, extras size: 594808, icicle size: 0
2019-11-14 01:33:18.287 2110-14522/? D/GamePkgDataHelper: notifyAppCreate(), pkgName: com.example.ud4_propuesto_1, sendRet: true
2019-11-14 01:33:18.287 2110-12153/? D/GamePkgDataHelper: getGamePkgData(). com.example.ud4_propuesto_1
2019-11-14 01:33:18.287 2110-12153/? D/GameManagerService: handleMessage(), MSG_APP_CREATE. ignore. pkgName: com.example.ud4_propuesto_1
2019-11-14 01:33:18.289 2110-14522/? E/JavaBinder: !!! FAILED BINDER TRANSACTION !!! (parcel size = 598680)
2019-11-14 01:33:18.289 2110-14522/? E/ActivityManager: Second failure launching com.example.ud4_propuesto_1/.DatosCentroMandoActivity, giving up
android.os.TransactionTooLargeException: data parcel size 598680 bytes
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(Binder.java:1145)
at android.app.IApplicationThread$Stub$Proxy.scheduleTransaction(IApplicationThread.java:1897)
at android.app.servertransaction.ClientTransaction.schedule(ClientTransaction.java:129)
at com.android.server.am.ClientLifecycleManager.scheduleTransaction(ClientLifecycleManager.java:47)
at com.android.server.am.ActivityStackSupervisor.realStartActivityLocked(ActivityStackSupervisor.java:1862)
at com.android.server.am.ActivityStackSupervisor.attachApplicationLocked(ActivityStackSupervisor.java:1199)
at com.android.server.am.ActivityManagerService.attachApplicationLocked(ActivityManagerService.java:10029)
at com.android.server.am.ActivityManagerService.attachApplication(ActivityManagerService.java:10097)
at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:170)
at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:4162)
at android.os.Binder.execTransact(Binder.java:739)
2019-11-14 01:33:18.290 2110-14522/? I/ActivityManager: Process com.example.ud4_propuesto_1 (pid 25813) has died: fore TOP (214,2655)
附加信息
我将 Drawable
图像保存为 xxxhdpi
。
导致应用程序崩溃的项目图像大小分别为 410 KB、393 KB 和 393 KB。其余图像重量小于 345 KB。
我测试过,只有带有较重图像的项目才会导致应用程序崩溃。
问题
有什么办法可以解决吗?
最佳答案
Intent 的总大小限制为 1MB,因此无法在其中发送位图。
您应该让您的数据对象接受从预设(可绘制资源)或图库(缓存文件的 URL?)中选取的图像,然后解析它并相应地加载图像。
关于java - 异常 - 无法从资源中找到可绘制的图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58847800/
这个问题在这里已经有了答案: Different ways of loading a file as an InputStream (6 个答案) 关闭 8 年前。 在我的 gradle java
给定一个 User 类: class User end 我想使用 .class_eval 定义一个新常量.所以: User.class_eval { AVOCADO = 'fruit' } 如果我尝试
这可能听起来很奇怪,但我正在开发一个需要查找 div 内的元素或 div 本身的插件。 脚本根据用户选择查找元素,但内容(包括标记)是可变的。因此脚本将按如下方式查找元素: $('.block').f
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 Improve th
我需要在按我自己的函数排序的对的多集中查找并删除一个值。显然, .find 总是将迭代器返回到末尾,而不是返回到搜索到的值。有小费吗?这是函数: struct cmp { bool operato
求助!我将如何通过遍历查看字符并计算有效字符出现之前的下划线数量来查找和删除前导下划线。以及从字符串末尾向后迭代以查找任何尾随下划线。 我可以使用下面的方法来删除下划线,但是如何迭代才能找到下划线。
如果你在 $(xml) 中有下面的 xml,你会变得懒惰: $(xml).find("animal").find("dog").find("beagle").text() 在 jQuery 中是否有类
你如何找到4个文件的交集? 我用了grep -Fx -f 1.txt 2.txt 3.txt 4.txt ,但它似乎只适用于 2 个文件。同样comm -12 1.txt 2.txt无法扩展为 4 个
我已经完成了标记的姿势估计并获得了 rvec 和 tvec 值。我不知道如何找到它的中心,因为我需要绘制一个需要中心值的圆柱体。 我该怎么做? 最佳答案 标记的 tvec 是标记从原点的平移 (x,y
我有一个任务,我需要找到 2 个单链接(单对单)列表的交集。我还必须为 2 个双向链接(双重 vs 双重)列表执行此操作: 对于单链表,我使用 mergeSort() 对两个列表进行排序,然后逐项比较
我是 R 的新手,我有一个 100x100 的方阵。我想找到这个矩阵的最大特征值。我试过了 is.indefinite(x) 但是它写 is.indefinite(x) : argument x is
您好,我是 svg 和 JavaScript 的新手,当鼠标位于 svg 上方时,我试图使一些 svg 元素弹出(通过缩放),反之亦然,当鼠标离开 svg 元素时。 我已经能够通过使用转换使 svg
我正在尝试为 scala 项目编写一个类,但在多个地方使用 class、def、while 等关键字出现此错误。 它发生在这样的地方: var continue = true while (conti
我有两个 pandas 数据框,它们只取自一列并将日期列设置为索引,所以现在我有两个 Series。我需要找到这些系列的相关性。 这里有几行来自dfd: index change 2018-
我正在尝试调整我的 Vagrantfile,因此如果它丢失,它会自动在项目根目录中创建一个文件夹。创建文件夹没问题,但我无法找到创建该文件夹的位置。 我发现此信息可在 Vagrant::Environ
我正在尝试在 jquery 中找到 Test3 的位置,请有人引导我走上正确的道路。 我需要jquery来显示5 Test7 Test2 Test6 Test5 Test3 Test8 谢谢 最佳
大家早上好 我有一个像这样的图像列表: 使用 jQuery 如何查找 ul#preload 中包含特定字符串(例如“green”)的所有图像 src 类似... var new_src = j
我正在开发一个修改 Excel 文件的应用程序。 如何找到任意行中最后使用的单元格? 示例:行号 => 5 中最后使用的单元格 最佳答案 要找到一行中的最后一个单元格,您需要 Range 的 End
我刚刚陷入 react native ,需要一些帮助才能在找到 token 时导航到 protected 屏幕。我应该在哪里寻找应用程序加载时的 token ?如何在不多次调用导航的情况下导航用户一次
非常奇怪...此页面是 protected 内容还是我不知道的内容?我尝试单击下一页 anchor 。 参见this page first. 我试图用这个来抓取元素 var buttonNext =
我是一名优秀的程序员,十分优秀!