2

アプリに固有の構成の詳細を保存するために、ブラックベリーで永続オブジェクトを使用しています。これが私がクラスを実装する方法です

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

    }
}

しかし、アプリをアンインストール/削除すると、これらの保存された値は削除されません。次回アプリをインストールすると、アプリは古い保存された値を取得します。

ブラックベリーでこれを適切に行うにはどうすればよいですか? ありがとう

4

1 に答える 1

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。の要素の 1 つだけVectorが他のアプリケーションで使用されていないパッケージ名を持つ場合でもVector、永続ストアから全体が削除されます。

注: アプリケーションが特定のパッケージ構造を持つオブジェクトを保存しない場合 (たとえば、java.util.Vectorまたはオブジェクトを保存するアプリケーション)、アプリケーションは、特定のアプリケーションに属することを識別するためにjavax.microedition.location.AddressInfo拡張するクラスを作成して使用する必要があります。パッケージによって一意に識別されるthis を保存すると、アプリケーションが削除されたときに永続ストアからデータが削除されることが保証されます。VectorVectorVector

この情報はここから

于 2012-01-27T13:52:48.880 に答える