2012-05-16 55 views
3

例外:Android的:異常傳遞匿名類的意圖參數

java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = MyClass$2) 

(簡化)代碼:

i.putExtra("myparam", generateA(context, "foo")); 
... 
private A generateA(final Context context, String foo) { 
    return new A() { 

     @Override 
     public void test() { 
      System.out.println("test"); 
     } 
    }; 
} 

接口:

public interface A extends Serializable { 

    public void test(); 

} 

我在做什麼錯?我通過的是一個可序列化的。

+0

是否有更多的代碼,你可以提供給我們......我看不出任何問題提供什麼,或郵寄棧跟蹤 – adam2510

+0

噢,好吧......我再次查看堆棧跟蹤,原因是外部類不是可序列化的!所以我讓它實現了Serializable。但它有一個Handler類的實例變量,它不是Serializable,現在因爲這個而失敗。 – Ixx

+1

請使用'Parcelable'來代替,因爲使用'Intent' extras要快得多。就我個人而言,我永遠不會夢想用'Parcelable'或'Serializable'來使用匿名內部類。 – CommonsWare

回答

0

如果我理解的很好,意圖失敗,因爲你的匿名類不能序列化,因爲它的處理程序?

是否有可能在目標活動中實現您的處理程序?該bahaviour類應該只包含的行爲功能與目標的活動提供了一個處理程序:

private transient Handler h; 

//Called by the activity in the onCreate 
void setHandler(Handler h){ 
    this.h = h; 
} 

//Called by the activity to start the behaviour function 
void startBehaviour(){ 
    //... 
    //The activity handler will call startHandlerBehaviour itself 
    h.sendMessage(); 
} 

//Called by the activity in the Handler to execute in the good context 
void startHandlerBehaviour() { 
    //... 
}