2016-06-28 101 views
-2

我有一个sharedpreferences,它保存和检索数据正确。但问题是这个时候手机重新启动它给空值。android sharedpreferences当应用程序或手机重新启动时得到空

这里是代码,我有尝试

if(encodedImage_profile3!=null) 
     { 

      wallpaper_sharedprefrences_profile3 = PreferenceManager.getDefaultSharedPreferences(context); 
      SharedPreferences.Editor edit = wallpaper_sharedprefrences_profile3.edit(); 
      edit.putString(PROFILE2_WALLPAPER, encodedImage_profile3); 
      edit.commit(); 
      // Toast.makeText(context, "new same image in prefrences", Toast.LENGTH_SHORT).show(); 
     } 
     wallpaper_sharedprefrences_profile3 = PreferenceManager.getDefaultSharedPreferences(context); 

     final String load_wallpaper_profile3 =wallpaper_sharedprefrences_profile3.getString(PROFILE2_WALLPAPER, ""); 

我也试试这个

if(encodedImage_profile3!=null) 
     { 
      wallpaper_sharedprefrences_profile3 = context.getSharedPreferences(PREF_PROFILE2_WALLPAPER, Context.MODE_PRIVATE); 
      SharedPreferences.Editor edit = wallpaper_sharedprefrences_profile3.edit(); 
      edit.putString(PROFILE2_WALLPAPER, encodedImage_profile3); 
      edit.commit(); 
     } 
     wallpaper_sharedprefrences_profile3 = context.getSharedPreferences(PREF_PROFILE2_WALLPAPER, Context.MODE_PRIVATE); 
     final String load_wallpaper_profile3 =wallpaper_sharedprefrences_profile3.getString(PROFILE2_WALLPAPER, ""); 
+0

你需要设置申请一次完成编辑共享偏好..... – silverFoxA

+0

当你明确地将默认值设置为'“”'时,它是如何给出'null'值的?请发布您的logcat输出。 – earthw0rmjim

+0

@silverFoxA他称'commit()'。 – earthw0rmjim

回答

0

而不是硬编码共享偏好逻辑,创建一个实用工具类相似的下面和访问您的项目。 Separate methods are available for different data types

/** 
* Shared preference class to handle app's local content 
*/ 
public class SharedPreferenceHandler { 

    //Class variables 
    private SharedPreferences sharedPrefSettings; 
    private SharedPreferences.Editor editor; 
    private static SharedPreferenceHandler m_cPrefObj=null; 

    private SharedPreferenceHandler(Context context){ 
     sharedPrefSettings = context.getSharedPreferences(SharedPreferenceConstants.SHARED_PREF_KEY, Context.MODE_PRIVATE); 
     editor=sharedPrefSettings.edit(); 
    } 

    public static SharedPreferenceHandler getSharedPrefInstance(Context context){ 
     if(m_cPrefObj==null){ 
      m_cPrefObj=new SharedPreferenceHandler(context); 
     } 
     return m_cPrefObj; 
    } 
    /** 
     returns string value for shared preference key 
    */ 
    public String getSharedPrefValue(String key){ 
     return sharedPrefSettings.getString(key,null); 
    } 

    /** 
     returns boolean shared preference value for key 
    */ 
    public boolean getSharedPrefValueBool(String key){ 
     return sharedPrefSettings.getBoolean(key, false); 
    } 
    /** 
     sets string shared preference value for key 
    */ 
    public void setSharedPrefBool(String key,boolean value){ 
     editor.putBoolean(key,value); 
     editor.commit(); 
    } 
    /** 
     sets string shared preference value for key 
    */ 
    public void setSharedPref(String key,String value){ 
     editor.putString(key, value); 
     editor.commit(); 
    } 

    /** 
    * 
    * @param key 
    * @return 
    */ 
    public long getSharedPrefValueLong(String key){ 
     return sharedPrefSettings.getLong(key,0); 
    } 

    /** 
    * 
    * @param key 
    * @param value 
    */ 
    public void setSharedPrefLong(String key,long value){ 
     editor.putLong(key,value); 
     editor.commit(); 
    } 

    /** 
    * 
    * @param key 
    * @return 
    */ 
    public int getSharedPrefValueInt(String key){ 
     return sharedPrefSettings.getInt(key,0); 
    } 

    /** 
    * 
    * @param key 
    * @param value 
    */ 
    public void setSharedPrefInt(String key,int value){ 
     editor.putInt(key,value); 
     editor.commit(); 
    } 
} 

中序中所需的类访问此逻辑,

private SharedPreferenceHandler mSharedPreferenceHandler; 

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_login); 
     initiateDependencies(); 

    } 
    /** 
    * Should initiate classes and objects which will be referred throughout app 
    */ 
    private void initiateDependencies(){ 

     mSharedPreferenceHandler =SharedPreferenceHandler.getSharedPrefInstance(this); 

    } 

要设置共享优先值请执行下列操作

mSharedPreferenceHandler.setSharedPref("PREF_KEY_REFRESH_INTERVAL", "abc"); 
mSharedPreferenceHandler.setSharedPrefBool("PREF_KEY_REFRESH_ACTION",true); 
相关问题