在Blackberry中删除应用程序时删除持久对象

时间:2012-01-27 13:49:06

标签: blackberry persistent-storage

我在黑莓中使用持久对象来存储特定于应用程序的配置详细信息。以下是我实现类

的方法
public class Preferences implements Persistable
{
    private static  PersistentObject persistentObject = PersistentStore.getPersistentObject(0x2759d6ff72264bdbL);
    private static Hashtable tbl = new Hashtable();

    public static void storeLoginToken(String token)
    {
        token = removeCharAt(token,0);
        token = removeCharAt(token,token.length()-1);
        tbl.put("token", token);
        persistentObject.setContents(tbl);
        persistentObject.commit();
    }

    public static String getLoginToken()
    {
        Hashtable tbl = (Hashtable)persistentObject.getContents();
        try
        {
            String token = tbl.get("token").toString();
            System.out.println("Token = "+token);
            return token;
        }
        catch(Exception e)
        {
            return null;
        }

    }
}

但是,如果我卸载/删除应用程序,这些存储的值不会被删除。当我下次安装应用程序时,应用程序将获取旧的存储值。

我怎样才能在黑莓中正确地做到这一点? 感谢

1 个答案:

答案 0 :(得分:7)

创建一个像这样的自定义哈希表类

package com.myapp.items;


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

import java.util.*;

public class MyAppHashtable extends Hashtable implements Persistable{

}  

将代码更改为

public class Preferences
{
    private static  PersistentObject persistentObject = PersistentStore.getPersistentObject(0x2759d6ff72264bdbL);
    private static MyAppHashtable tbl = new MyAppHashtable ();

    public static void storeLoginToken(String token)
    {
        token = removeCharAt(token,0);
        token = removeCharAt(token,token.length()-1);
        tbl.put("token", token);
        persistentObject.setContents(tbl);
        persistentObject.commit();
    }

    public static String getLoginToken()
    {
        MyAppHashtable tbl = (MyAppHashtable )persistentObject.getContents();
        try
        {
            String token = tbl.get("token").toString();
            System.out.println("Token = "+token);
            return token;
        }
        catch(Exception e)
        {
            return null;
        }

    }
}

这样我们就可以遵守RIM的以下信息

BlackBerry持久性模型

使用BlackBerry持久性模型时,仅当商店包含属于已删除应用程序的数据时,才会删除数据。

例如,如果应用程序存储带有名为com.mycompany.application.storage的包的对象,并且BlackBerry智能手机上没有其他应用程序引用该包,则会删除持久存储和已删除的应用程序。

如果对象包装在诸如Vector的容器中,情况也是如此。即使Vector中只有一个元素的包名未被其他应用程序使用,整个Vector也会从持久存储中删除。

注意:如果应用程序不存储具有标识包结构的任何对象(例如,存储java.util.Vectorjavax.microedition.location.AddressInfo对象的应用程序),则应用程序应创建并使用一个类扩展Vector以识别Vector属于给定的应用程序。当您存储由其包唯一标识的Vector时,您可以保证在删除应用程序时从持久存储中删除数据。

info is from here