Сохранить список объектов PropertyBusinessObjects в хранилище - PullRequest
0 голосов
/ 04 марта 2019

Мне нужно сохранить динамическое List из PropertyBusinessObjects в хранилище, но я не нашел, как это сделать.Я должен иметь возможность добавлять и удалять элементы из списка.

Следующий код теста выдает java.io.IOException: Object type not supported: CollectiveDAO.Я использую registerExternalizable().

public class TestSaveListDAOs {

    private Form current;
    private Resources theme;
    public static List<CollectiveDAO> collectivesDB = new ArrayList<>();

    public void init(Object context) {
        [...]       
    }

    public void start() {
        if(current != null){
            current.show();
            return;
        }
        Form hi = new Form("Hi World", BoxLayout.y());
        hi.add(new Label("Hi World"));
        hi.show();

        restoreDB();
        collectivesDB.add(new CollectiveDAO());
        collectivesDB.add(new CollectiveDAO());
        saveDB();
        restoreDB();

    }

    public void stop() {
        [...]
    }

    public void destroy() {
    }

    public static void saveDB() {

        for (CollectiveDAO collectiveDAO : collectivesDB) {
            collectiveDAO.getPropertyIndex().registerExternalizable();
        }

        Storage.getInstance().writeObject("CollectivesDB", collectivesDB);
    }

    private static void restoreDB() {

        Object restoredCollectivesDB = Storage.getInstance().readObject("CollectivesDB");
        if (restoredCollectivesDB != null) {
            collectivesDB = ((List) restoredCollectivesDB);
        } 
    }

}
public class CollectiveDAO implements PropertyBusinessObject {

    public final Property<String, CollectiveDAO> collectiveID = new Property<>("collectiveID");

    private final PropertyIndex idx = new PropertyIndex(this, "CollectiveDAO",
            collectiveID);

    @Override
    public PropertyIndex getPropertyIndex() {
        return idx;
    }

}

1 Ответ

0 голосов
/ 04 марта 2019

Я бы использовал JSON, а не Externalizable, например:

public static void saveDB() {
    PropertyIndex.storeJSONList("CollectivesDB", collectivesDB);
}

private static void restoreDB() {
    collectivesDB = new CollectiveDAO().getPropertyIndex().loadJSONList("CollectivesDB");
}

Это короче с более хорошим выходом.Однако, если вы хотите использовать Externalizable, вы используете неправильно.Вы должны удалить вызов for и вместо этого сделать:

public void init(Object context) {
    new CollectiveDAO().getPropertyIndex().registerExternalizable();
    [...]       
}

Это необходимо только один раз для чтения и записи (его не хватало для чтения).Как регистрируется новый тип объекта (CollectiveDAO).

...