[英]Exception on serialization on Samsung Galaxy S5
在我的应用程序中,我将一个数据对象从一个Activity
传递到另一个。 代码非常简单,在第一个Activity
:
Intent intent = new Intent(getActivity(), BlablaActivity.class);
intent.putExtra(Values.KEY_ITEM, item);
并在接收Activity
:
Intent intent = getActivity().getIntent();
item = (Item) intent.getSerializableExtra(Values.KEY_ITEM);
Advertising
类也非常简单:
public class Advertising implements Serializable {
private static final long serialVersionUID = -7292860618498106953L;
private Content content;
private Anchor anchor;
private String target;
private String id;
// ...
}
以及似乎导致此问题的Anchor
类:
public class Anchor implements Serializable {
private static final long serialVersionUID = 7360857799761417956L;
public String value;
public String label;
// ...
}
我仅针对 Samsung Galaxy S5 (sm-g900f) 收到以下异常:
引起:java.lang.IllegalArgumentException:field de.mycompany.model.Advertising.anchor
有类型 de.mycompany.model.resultandexpose.Anchor,得到 de.mycompany.model.resultandexpose.Anchor
我无法理解这一点,预期的课程是实际的课程。 这似乎是另一个三星特有的问题。 任何人都经历过这种情况并知道解决方法或知道这是什么原因?
编辑:
是的,我正在使用 Proguard。 proguard 文件如下所示:
-keepattributes ** -keep class !android.support.v7.internal.view.menu。 , {*;} -dontpreverify -dontoptimize -dontshrink -dontwarn **
第二行是三星设备上已知错误的解决方法,不应触及除android.support.v7.internal.view.menu.*
包中的类以外的任何类。
Anchor 类的 serialVersionUID 在我的所有类中都是唯一的。
切换到Parcelable
意味着对整个项目进行大规模检修。 将对象作为Serializable
传递应该适用于所有设备。
Anchor
类只是这个 bug 的一个例子,它发生在其他几个基本看起来相同或非常相似的类上。 因此,这不是一个类,但似乎是一个更一般的问题。
您应该查看 Parcelable 以在两个有意图的活动之间传递对象。
您可以查看解释其工作原理的本教程,我还建议您查看 Android Doc。
我遇到了和你类似的问题,我发现在 Galaxy s5 设备上进行棒棒糖更新时,三星使用了有问题的 multidex 实现。 你可以在这里查看我的问题来解释问题。 有人回答了我的问题,但我没有检查它是否有效。 也许这会帮助你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.