blackberry - 在黑莓中删除应用程序时删除持久对象

标签 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;
        }

    }
}

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

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

最佳答案

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

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

关于blackberry - 在黑莓中删除应用程序时删除持久对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9034174/

相关文章:

blackberry - Blackberry 中的自定义 LabelField 无法正确显示文本

尽管正在设置数据,但 AngularJS View 未反射(reflect) $scope.model

iphone - 如何将数据加载到Core Data中?

arrays - Swift 中的简单持久存储

core-data - 如何禁用 WAL 日志模式

android - 在 Android 中频繁保存首选项有什么缺点吗?

java - 如何检查数组中是否已存在元素

user-interface - 如何在 BlackBerry 中自定义 ListField?

android - 对像素和点感到困惑

blackberry - 如何去除黑莓中 Labelfield 周围的白色