Проблема сериализации с 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
задан Pentium10 28 June 2010 в 23:42
поделиться

2 ответа

Наконец-то я заставил его работать следующим образом:

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]);
        }
    }
}
1
ответ дан 2 September 2019 в 23:25
поделиться

Мне очень жаль; Я упустил из виду использование вызова no-arg toArray () .

Обратите внимание, что существует перегруженный метод toArray (T []) , который принимает массив в качестве аргумента.

Используя эту форму, вы можете контролировать тип компонента массива, и он будет работать должным образом.

protected void onPostExecute(SortedSet<RatedMessage> result) {
  lancon.putExtra("results", result.toArray(new RatedMessage[result.size()]));
}
1
ответ дан 2 September 2019 в 23:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: