2010-06-28 65 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()])); 
}