三星Galaxy S5序列化的例外情况

asc*_*sco 6 java android

在我的应用程序中,我将数据对象从一个传递Activity到另一个.代码很简单,第一个Activity:

    Intent intent = new Intent(getActivity(), BlablaActivity.class);
    intent.putExtra(Values.KEY_ITEM, item);
Run Code Online (Sandbox Code Playgroud)

并在接收Activity:

    Intent intent = getActivity().getIntent();
    item = (Item) intent.getSerializableExtra(Values.KEY_ITEM);
Run Code Online (Sandbox Code Playgroud)

Advertising门课也很简单:

public class Advertising implements Serializable {

    private static final long serialVersionUID = -7292860618498106953L;

    private Content content;
    private Anchor anchor;
    private String target;
    private String id;

// ...

}
Run Code Online (Sandbox Code Playgroud)

而这个Anchor类似乎导致了这个问题:

public class Anchor implements Serializable {

    private static final long serialVersionUID = 7360857799761417956L;

    public String value;
    public String label;

// ...

}
Run Code Online (Sandbox Code Playgroud)

我仅针对三星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的一个例子,它发生在几个基本上看起来相同或非常相似的其他类上.所以,不是一个类,但似乎是一个更一般的问题.

rwo*_*cik 1

我遇到了与您类似的问题,我发现通过在 Galaxy s5 设备上进行 lolipop 更新,三星使用了有缺陷的 multidex 实现。您可以在这里查看我的问题来解释问题。有人回答了我的问题,但我没有检查它是否有效。也许这会对你有所帮助。