2017-09-11 3 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); 
    } 
} 

私は、コードを実行したとき、私はラインi.putExtra(AUTO_EXTRA, a);上のエラーを取得し、二つのクラス、MainActivityとセットアップを持っています。私は、MainActivityをシリアライズするとこの問題は解決することが分かりましたが、MainActivityをSerializableにすることは望ましくありません。なぜMainActivityをシリアル化しているのか分かりません。私はここで間違って何をしていますか?

答えて

0

匿名の内部クラスには、それが含まれるクラスの参照が含まれます。この場合、クラスMainActivityはシリアライズ可能ではありません。だからあなたはエラーを持っています。したがって、基本クラスのサブクラスを別のクラスファイルにする必要があります。

+0

私の基本クラスのサブクラスが意味することを説明できますか、私はあなたが意味することについてはっきりしていません。 –

+0

私はあなたの抽象クラスを意味しました。 public class AutoImplは自動{ //実装 }を拡張します。 –

関連する問題