【问题标题】:Issue with serializing abstract class序列化抽象类的问题
【发布时间】:2017-09-11 17:05:23
【问题描述】:

我正在尝试序列化摘要并将其传递给活动,但我收到错误 java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.example.MainActivity$1)

MainActivity.java

public class MainActivity extends Activity {

    private static final String AUTO_EXTRA = "AUTO_EXTRA";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        RelativeLayout l = new RelativeLayout(this);
        l.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

        new Setup.auto(this) {
            @Override
            public void onFailure(String message) {

            }
        };
    }
}

Setup.java

public static class Setup {
    public static abstract class auto implements FailedAuto, Serializable {
        public auto(Activity activity) {
            auto a = (auto) this;
            Intent i = new Intent(activity, AutoSetup.class);
            i.putExtra(AUTO_EXTRA, a); // Error happens here.
            activity.startActivity(i);
        }
    }

    private class AutoSetup extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            ((auto) getIntent().getSerializableExtra(AUTO_EXTRA)).onFailure("Message");
        }

    }

    private interface FailedAuto {
        void onFailure(String message);
    }
}

我有两个类,MainActivity 和 Setup,当我运行代码时,我在行 i.putExtra(AUTO_EXTRA, a); 上得到错误。我发现序列化 MainActivity 解决了这个问题,但我不希望 MainActivity 成为Serializable,我不明白为什么它认为我正在序列化 MainActivity。我在这里做错了什么?

【问题讨论】:

    标签: java android serialization


    【解决方案1】:

    匿名内部类包含它所在类的引用。在这种情况下,类MainActivity 是不可序列化的。所以你得到了错误。所以你需要在一个单独的类文件中创建你的基类的子类。

    【讨论】:

    • 你能解释一下我的基类的子类是什么意思吗,我不太清楚你的意思。
    • 我的意思是你的抽象类。像这样创建另一个新类: public class AutoImpl extends auto{ //implementation }
    猜你喜欢
    • 1970-01-01
    • 2011-10-07
    • 2011-09-26
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 2019-09-14
    相关资源
    最近更新 更多