2012-01-27 25 views
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; 
     } 

    } 
} 

私はアプリをアンインストール/削除すると、これらの保存された値は削除されません。次回のためにアプリをインストールすると、アプリは古い値をフェッチしています。

私はこれをブラックベリーで正しく行うことができますか? おかげ

+0

アプリケーションを削除した後、デバイスは再起動を要求しないことがあります。同じアプリケーションをインストールする前にデバイスを再起動すると、問題は解決されます。 「削除されない永続オブジェクト」の問題は、主にBlackberryバージョン5.0のデバイスで発生します。どのバージョンを使用していますか? – alishaik786

+0

はい私はあなたの答えにバージョン5.0 – Zach

答えて

7

たちはRIM

から以下の情報を遵守するようにこれは、この

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

    } 
} 

にコードを変更しますBlackBerry持続モデル

BlackBerry Persistenceモデルを使用すると、削除されたアプリケーションに属するデータがストアに含まれている場合にのみ、データが削除されます。

たとえば、アプリケーションがcom.mycompany.application.storageというパッケージでオブジェクトを保存し、BlackBerryスマートフォン上の他のアプリケーションがそのパッケージを参照しない場合、永続ストアと削除されたアプリケーションは削除されます。

オブジェクトがVectorなどのコンテナにラップされている場合も同じです。 Vectorの要素の1つだけが他のアプリケーションで使用されていないパッケージ名を持っていても、Vector全体が永続ストアから削除されます。

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

info is from here

+0

THanksを使用しています。私はあなたが言ったようにそれを実装しました。しかし、MyAppHashtable tbl =(MyAppHashtable)persistentObject.getContents();クラスキャスト例外をスローしています。何か案が? – Zach

+2

はい、ハッシュテーブルとして保存されている古い値を読み込んでいるためです。永続ストアをクリアします。すべての値を削除してストアを削除します。再試行してください。それは動作するはずです。 – rfsk2010

+0

これはあなたを助けましたか? – rfsk2010

関連する問題