2017-09-11 59 views
1

我试图序列化一个摘要并将其传递给一个活动,但我得到错误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和设置,当我运行代码,我得到的线i.putExtra(AUTO_EXTRA, a);错误。我发现序列化MainActivity解决了这个问题,但我不想MainActivity是Serializable,我不明白为什么它认为我在序列化MainActivity。我在这里做错了什么?

回答

0

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

+0

你能解释一下我的基类的子类是什么意思吗?我不清楚你的意思。 –

+0

我的意思是你的抽象类。创建另一个新类,如下所示: public class AutoImpl extends auto { // implementation } –