MainScreen +可在一个BlackBerry类中持久保存

时间:2012-03-04 16:38:02

标签: model-view-controller blackberry storage persistent

我现在的Blackberry应用程序课程很少。现在我正在做的是为用户创建一个屏幕以输入他们的信息,将其存储在持久存储中,这样当他们点击导航按钮后,他们输入的所有信息都将显示在列表视图中。

我的问题是,我无法创建一个扩展MainScreen并同时实现Persistable的类,因为它会给我错误。

如何解决这个问题?

为了让你们更容易看到,这是我所拥有的课程的片段。

inMenu.add(new MenuItem ("Save",110,10)
    {
        public void run()
        {
            synchronized(uv.store)
            {
                Vector _data = (Vector) UserVector.store.getContents();
                if (_data == null) 
                {
                    _data = new Vector();
                    UserVector.store.setContents(_data);
                }

                UserVector newRec = new UserVector();

                newRec.setElement(UserVector.TITLE,titleLabel.getText());
                newRec.setElement(UserVector.VENUE,venueLabel.getText());
                newRec.setElement(UserVector.DESCRIPTION,descriptionLabel.getText());

                _data.addElement(newRec);
                UserVector.store.commit();  
            }
            Dialog.inform("Information Saved!");
        }
    });

3 个答案:

答案 0 :(得分:1)

您正在目睹BlackBerry编程不是Java的真实证据:接口(Persistable)不会被继承。

在BlackBerry中,如果你想坚持一个类,将它标记为Persistable是不够的。向上的整个类层次结构应该是可持久的。同时,标记一个Persistable类会让你认为子类将继承可持久化,但事实并非如此。您必须明确将子类标记为Persistable。 (我知道,此时你可能会认为这是一种异端邪说,一种暴行,一种......,好吧,黑莓编程充满了这样棘手的事情)。将Persistable视为未继承的标记接口。

在您的情况下,您遇到运行时错误,告诉您为了保留您的屏幕,您必须MainScreen实施Persistable,当然您不能这样做,因为您不能无法访问源代码。即使你可以,还有另一个警告:你的屏幕中的每个字段,集合,容器也应该是可持久的,否则你会得到一个例外。所以你在这里完全没有运气,因为Field或其子类都没有实现Persistable

但无论如何,即使有可能,也不建议保存整个View(带有许多嵌套对象)以方便使用。而是将字段和屏幕状态的内容保存在一个小容器对象中(实现Persistable)并在进入应用程序时恢复屏幕。这种方法允许您重用容器对象,以防在GUI中添加或删除新的字段(否则,每次更改GUI设计时都必须清理模拟器内存​​,以避免ClassCastException从持久性加载屏幕) 。因为您将GUI与持久性分离,所以它还允许您选择保存哪些字段以及哪些字段不需要。

答案 1 :(得分:0)

MainScreen是一个非常复杂的类,其中包含许多用户界面元素。即使你可以坚持整个主屏幕我也无法想象为什么你会想要。 MVC模式表明您将模型(持久存储)与视图和控制器分开。

在MainScreen中组合视图和控制器可能很容易,但您可以将它们分开。

不要在持久性存储中添加无关内容的另一个理由是,每次更改它时,都必须提供将旧格式存储迁移到新格式,或强制用户重新输入数据。 / p>

答案 2 :(得分:0)

从它的外观来看,你的UserVector类应该实现Persistable,并且应该有静态方法来存储和从持久内存中检索UserVector对象。

查看http://docs.blackberry.com/en/developers/deliverables/7693/Persistent_data_storage_509562_11.jsp以获得有关持久存储的详细介绍。

持久性内存有点像Windows注册表。您可以使用唯一键查找对象,操作它们,然后将它们保存回那里,只要它们是可序列化的(可持久的)。不要试图将你的UI与永久存储器保存在一起,只保存数据。

此外,如果您要保存许多用户数据,最好还是查看SQLite database for storage