1

私はプロセスの前にこれを持っています:

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が発生するのはなぜですか?

4

2 に答える 2

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]);
        }
    }
}
于 2010-06-29T00:12:40.937 に答える
1

申し訳ありません; toArray()引数なしの呼び出しの使用を見落としていました。

toArray(T[])配列を引数として取るオーバーロードされたメソッドがあることに注意してください。

このフォームを使用すると、配列のコンポーネント タイプを制御でき、期待どおりに機能します。

protected void onPostExecute(SortedSet<RatedMessage> result) {
  lancon.putExtra("results", result.toArray(new RatedMessage[result.size()]));
}
于 2010-06-29T04:42:27.323 に答える