0

Я хочу отправить объект класса - ребенок изОтправить ребенка ArrayList к Android деятельности

ArrayList<ArrayList<Double>> 

к Android деятельности. Это мой класс:

package cz.honza.backpropagation.network.trainingset; 

import java.io.Serializable; 
import java.util.ArrayList; 

import cz.honza.backpropagation.network.parser.Csv; 

public class TrainingLineBase extends ArrayList<ArrayList<Double>> implements TrainingLine, Serializable { 

    private static final long serialVersionUID = -2777317734401540881L; 

    @Override 
    public String getEditorType() { 
     return Csv.SIMPLE; 
    } 
} 

Он реализует Serializable, так что я могу просто использовать

public Intent putExtra (String name, Serializable value) 

метод Android Intent используется для запуска этой деятельности. Затем я попытаюсь прочитать его в методе onCreate Activity.

getIntent().getSerializableExtra(INTENT_EXTRA_DATA); 

Выглядит просто, но это не работает. Я не получаю объект своего класса TrainingLineBase, получаю

ArrayList<ArrayList<Double>> 

который является его родителем в дереве наследования. Он содержит те же данные, что и исходная TrainingLineBase. Поэтому кажется, что сериализация не работает. Реальные данные были перенесены, но тип класса не был.

Это ошибка в Android или я что-то неправильно делаю?

Обновление: Существует довольно простой способ получить рабочее решение. Я могу изменить наследование в собственность. СЖВЗ класс сериализации/десериализации хорошо:

public class TrainingLineBase implements TrainingLine, Serializable { 
    public ArrayList<ArrayList<Double>> mData; 
    // .... 
+0

Вы пробовали лить его в TrainingLineBase или проверяете результат 'getIntent(). GetSerializableExtra (INTENT_EXTRA_DATA) instanceof TrainingLineBase'? – GreyBeardedGeek

+0

Как вы помещаете данные? –

+0

Кастинг для TrainingLineBase вызывает ClassCastException, потому что вы не можете отдать родителя ребенку. –

ответ

1

У меня нет прямого ответа на свой вопрос, но я могу предложить альтернативу.

Как рекомендуется в нижней части документации по интерфейсу Serializable от Android по адресу http://developer.android.com/reference/java/io/Serializable.html, кодируя состояние вашего класса, поскольку JSON может быть предпочтительнее сериализации Java.

Если вы хотите пройти этот маршрут, вы можете «сериализовать» свой объект на String с помощью GSON или аналогичной библиотеки JSON и поместить результат в StringExtra в Intent. Затем, чтобы десериализовать, получите StringExtra от Intent, десериализуйте строку JSON, используя GSON. При использовании GSON вы указываете класс объекта, который вы пытаетесь десериализовать.

Смежные вопросы