【问题标题】:Blackberry persistent object giving issues黑莓持久对象给出问题
【发布时间】:2011-02-02 13:21:35
【问题描述】:

我正在使用持久存储和持久对象。我能够保存值。我将每个基元存储到一个向量中,然后保存该向量。所以现在会发生什么,当我启动应用程序并说保存三个值时.这些值存储在向量中。如果我启动应用程序,检查这些值,它会正确显示保存的值。现在,如果我再次说保存两个值,那么向量中的总保存值应该是 5。但是当我关闭应用程序并重新启动它时,它只显示我保存的最后两个值,前三个保存的值没有显示。请帮助我

package com.kcrw.ui;
import java.util.Random;

import net.rim.device.api.system.PersistentObject;
import net.rim.device.api.system.PersistentStore;
import java.util.Vector;

import com.kcrw.model.Song;

import net.rim.device.api.util.Arrays;
import net.rim.device.api.util.Persistable;

public class Persist implements Persistable{

    public static PersistentObject abc;
    public static PersistentObject abc1;
    public static PersistentObject abc2;
    public static PersistentObject abc3;
    public static String b;
    public static String c;
    public static String d;
    public static String e;
    public static Vector vect;
    public static Vector xyz=new Vector();
    static {
          abc   = PersistentStore.getPersistentObject(0xb92c8fe20b256b82L);
          abc1   = PersistentStore.getPersistentObject(0xa94f6433aaf45909L);
          abc2   = PersistentStore.getPersistentObject(0xfbe29f690c998fb1L);
          abc3   = PersistentStore.getPersistentObject(0x67a6bd7c03940754L);
    }

    public static void data(){
    synchronized (abc) {

        abc.setContents(((Song) MoreInfoSongDetails.shows.elementAt(MoreInfo.listFieldIndex))
                .getTitle());
        abc.commit();
         }


synchronized (abc1) {

        abc1.setContents(((Song) MoreInfoSongDetails.shows.elementAt(MoreInfo.listFieldIndex))
                .getAirtime());
        abc1.commit();
         }


synchronized (abc2) {

    abc2.setContents(((Song) MoreInfoSongDetails.shows.elementAt(MoreInfo.listFieldIndex))
            .getAlbumImage());
    abc2.commit();
     }
synchronized (abc3) {
      System.out.println("vector size is"+xyz);



    abc3.setContents(xyz);

    abc3.commit();
     }  

}

    public static String getTitle() {
        synchronized (abc) {

            b= (String)abc.getContents();
            //xyz.addElement(b);
            return b;
        }
    }
    public static String getTime() {
        synchronized (abc1) {

            c= (String)abc1.getContents();
            //xyz.addElement(c);
            return c;
        }
    }

    public static String getImage() {
        synchronized (abc2) {

            d= (String)abc2.getContents();
            //xyz.addElement(d);

            return d;
        }

    }
    public static Vector save() {
        synchronized (abc3) {

            vect= (Vector)abc3.getContents();
        int i=vect.size();
        for(int b=0;b<i;b++){
            System.out.println("element at"+b+"is"+vect.elementAt(b));
        }
            return vect;
        }

    }   
}

【问题讨论】:

  • 我没有看到任何将任何内容分配给向量的代码。我也很困惑,您的“保存”函数从持久存储中读取向量,而您的“数据”方法存储向量。
  • 其实我很抱歉,我在 getTitle(0,getImage(),getTime(0) 中注释掉 xyz.addElement() 的方法是我向向量 xyz 添加元素的地方。它不应该被评论。但问题仍然是我上面描述的
  • 我认为每次调用此类向量 xyz 时都会重新创建,因为我们使用的是新向量(),如果我不使用新向量,我会得到空指针异常

标签: java blackberry


【解决方案1】:

您的代码示例不是很好,但保存和恢复向量非常简单,如下所示:

http://www.blackberry.com/developers/docs/4.5.0api/net/rim/device/api/system/PersistentStore.html

我将它合并到一个关于对象持久性的小tutorial 中。还有一个 PowerPoint 幻灯片here 提供了更多详细信息。

浏览这些页面,您应该能够找到您的问题。\

【讨论】:

  • 感谢您的帮助。问题是我可以保存和检索一次。但是当我关闭应用程序并重新启动并保存新值时,旧保存的值会消失,并且只显示新保存的值
  • 您必须在应用启动时读取旧向量。否则,您最终只会重写它。
  • 这是我不久前发布的一个 SOF 示例:stackoverflow.com/questions/3805182/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-30
  • 1970-01-01
  • 1970-01-01
  • 2012-02-20
相关资源
最近更新 更多