2010-06-28 47 views
1

我的過程之前有這樣的:序列化問題與SortedSet的,數組的序列化

protected void onPostExecute(SortedSet<RatedMessage> result) { 
    List<Object> list=Arrays.asList(result.toArray()); 
    lancon.putExtra("results", list.toArray()); // as serializable 
} 

然後在另一部分我有

Object o=this.getIntent().getSerializableExtra("results"); 
//at this point the o holds the correct value (checked by debugger) 
RatedMessage[] rm = (RatedMessage[]) o;// this line hangs out w ClassCastException 
resultSet = new TreeSet<RatedMessage>(new Comp()); 
Collections.addAll(resultSet, rm); 

爲什麼我得到的ClassCastException異常?

回答

1

最後我得到它的工作是這樣的:

Serializable s = this.getIntent().getSerializableExtra("results"); 
Object[] o = (Object[]) s; 
if (o != null) { 
    resultSet = new TreeSet<RatedMessage>(new Comp()); 
    for (int i = 0; i < o.length; i++) { 
     if (o[i] instanceof RatedMessage) { 
      resultSet.add((RatedMessage) o[i]); 
     } 
    } 
} 
+0

Thx,當所有其他失敗時我成功應用此方法。 – hornetbzz 2012-08-31 16:04:57

1

對不起;我忽略了使用no-arg toArray()呼叫。

請注意,重載toArray(T[])方法將數組作爲參數。

通過使用此表單,您可以控制數組的組件類型,並且它將按預期工作。

protected void onPostExecute(SortedSet<RatedMessage> result) { 
    lancon.putExtra("results", result.toArray(new RatedMessage[result.size()])); 
}