2010-09-13 90 views
5

我遇到了一个奇怪的问题,即我的应用程序的SharedPreference在手机重启时似乎丢失了一些特定的键(不是全部)。Android,SharedPreference在手机重启时丢失

你有没有遇到过这个问题?我用这个键来存储一个序列化的对象,我在我自己的Application类中做了这个。

public class Application extends android.app.Application { 

static String key = "favs"; 
SharedPreferences settings; 
public Favs favs; 

@Override 
public void onCreate() { 
    super.onCreate(); 
    settings = PreferenceManager.getDefaultSharedPreferences(this); 
    String value = settings.getString(key, ""); 
    if (value != null && value.length() > 0) { 
     try { 
      Favs = (Favs) deSerialize(value.getBytes()); 
     } catch (Exception ex) { 
     } 
    } 
    if(favs == null) 
     favs = new Favs(); 
} 

public void storeFavss() { 
    if (favs == null) 
     return; 
    try { 
     byte[] bytes = serialize(favs); 
     if(bytes != null) 
     { 
      String s = new String(bytes); 

      settings.edit().putString(key, s); 
      settings.edit().commit(); 
     } 
    } catch (Exception ex) { 

    } 
} 
+1

把一些日志在catch块中,这可能会在针指向问题的帮助。 – bhups 2010-09-13 03:40:33

回答

2

调试完成后,我会在这里显示我自己的anwser,希望它能帮助别人。

  1. 下面的代码是坏的。似乎edit()方法每次都会返回一个新对象。

    settings.edit().putString(key, s); 
    settings.edit().commit(); 
    
  2. 如果您要保存在SharedPreference,Base64编码它的一些序列化对象的字节!

1
favs = (Favs) deSerialize(value.getBytes()); 
相关问题