繁体   English   中英

三星 Galaxy S5 序列化异常

[英]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

我无法理解这一点,预期的课程实际的课程。 这似乎是另一个三星特有的问题。 任何人都经历过这种情况并知道解决方法或知道这是什么原因?

编辑:

  1. 是的,我正在使用 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM