Zac*_*ach 2 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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我卸载/删除应用程序,这些存储的值不会被删除.当我下次安装应用程序时,应用程序将获取旧的存储值.
我怎样才能在黑莓中正确地做到这一点?谢谢
像这样创建一个自定义哈希表类
package com.myapp.items;
import net.rim.device.api.util.Persistable;
import java.util.*;
public class MyAppHashtable extends Hashtable implements Persistable{
}
Run Code Online (Sandbox Code Playgroud)
并将您的代码更改为
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这样我们就可以遵守RIM的以下信息
BlackBerry持久性模型
使用BlackBerry持久性模型时,仅当存储包含属于已删除应用程序的数据时,才会删除数据.
例如,如果应用程序存储带有被调用包的对象,com.mycompany.application.storage并且BlackBerry智能手机上没有其他应用程序引用该包,则会删除持久存储和已删除的应用程序.
如果对象被包装在诸如a的容器中,情况也是如此Vector.即使只有其中一个元素Vector具有未被其他应用程序使用的包名称,整个Vector也会从持久性存储中删除.
注意:如果应用程序不存储具有标识包结构的任何对象(例如,存储java.util.Vector或javax.microedition.location.AddressInfo对象的应用程序),则应用程序应创建并使用扩展的类,Vector以便标识Vector属于给定应用程序的类.当您存储Vector它(由其包唯一标识)时,您可以保证在删除应用程序时从持久存储中删除数据.
| 归档时间: |
|
| 查看次数: |
1932 次 |
| 最近记录: |