SharedPreferences保存加载不适用于Gingerbread。想法?

时间:2014-07-04 10:36:13

标签: android sharedpreferences

所以我实现了一个通用的SharedPreferences类,它将一些文本序列化并将其保存在SharedPreferences String字段中。它在运行Android 4.4.2的HTC One M8设备上运行良好。但是,当我在运行根姜饼(2.2)的三星Galaxy S1上进行测试时,它总会返回" null"在读取字符串时。什么想法可能是错的?

如果我在保存之后尝试加载(在同一个过程中),则返回字符串。只有当我杀死进程并重新启动时,它才会消失。注意:从设备重新启动。不重新编译/重新部署。怪异。

代码:

import android.content.Context;
import android.content.SharedPreferences;
import com.myapp.Container.

/**
 */
public class SharedPrefsSavable {
    private final static String PrefsKey = "com.myapp";
    public static <T> T load(Class type, Context context) {
        SharedPreferences prefs = context.getSharedPreferences(PrefsKey, Context.MODE_PRIVATE);
        T userData = null;
        try {
            String key = getPreferencesId(type);
            String stringData = prefs.getString(key, null);
            if (stringData != null) {
                userData = (T) Container.Serializer.deserialize(type, stringData);
            }
        }
        catch (Exception ex)
        {
            Container.Log.w("Unable to deserialize " + type + ": " + ex.getMessage());
        }
        if (userData == null) {
            try {
                userData = (T) type.newInstance();
            }
            catch (Exception ex) {
                throw new RuntimeException(ex);
            }
        }
        return userData;
    }

    public void save(Context context) {
        SharedPreferences prefs = context.getSharedPreferences(PrefsKey, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = prefs.edit();
        String asString = Container.Serializer.serialize(this);
        String objectKey = getPreferencesId();
        editor.putString(objectKey, asString);
        editor.commit();
    }

    private static String getPreferencesId(Class<? extends SharedPrefsSavable> type) {
        return type.getName();
    }

    public String getPreferencesId() {
        return SharedPrefsSavable.getPreferencesId(this.getClass());
    }

}

2 个答案:

答案 0 :(得分:0)

试试这个,

        SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences( context);
        SharedPreferences.Editor editor = sharedPref.edit();
        editor.putString( "Key", "value" );

        // retrive 

        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences( context);
        String value = prefs.getString("key","default" );

答案 1 :(得分:0)

红鲱鱼 - 这是我的设备特有的一个问题,由于多次重装不能完全应对,因此有一些腐败状态。留下这个答案,以防其他人遇到同样的问题。

基本上我在

监控文件
/dbdata/databases/com.myapp/shared_prefs/com.myapp_preferences.xml

我注意到它从未改变过。我卸载了该应用并完全删除了/dbdata/databases/com.myapp,然后重新安装。文件被重新创建,这次它工作。所以我猜测以前的安装中存在陈旧的文件/文件夹,我的应用程序现在无权更改。