【发布时间】:2016-10-11 10:09:24
【问题描述】:
我想解决一个很奇怪的问题
在 Nexus 5 上恢复出厂设置后,我有一个在所有测试设备上都运行良好的应用,当它尝试使用代码从 SharedPreferences 获取 int 时
LEVEL_MAXIMO_ALCANZADO = sp.getInt(SP_NIVEL_JUEGO_MAXIMO, 1);
它给了我一个字符串(但仅在 Nexus 5 中,在其他设备中它给了我 int 但在我的 nexus 5 中导致异常java.lang.String cannot be cast to java.lang.Integer)
如果我用代码得到字符串的值
String prueba = sp.getString(SP_NIVEL_JUEGO_MAXIMO, "1");
我得到5t+SNTiVFHA=的值
我不知道为什么只有在恢复出厂设置后才会在 nexus 5 中通过
如果有人可以提供提示以遵循它会很棒,我现在迷路了
代码 - ( ctx 是一个上下文对象)
public static SharedPreferences sp;
public static SharedPreferences.Editor editor;
if(sp == null) sp = ctx.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
if(editor == null) editor = sp.edit();
editor.putInt(SP_DINERO, DINERO);
editor.commit();
其他信息
我还尝试卸载应用并重新启动设备
我使用了 ObscuredSharedPreferences 一个加密它们的类,在该类中它给了我垫块损坏的异常,然后我切换到 SharedPreferences 但同样的错误
由于我的手机在仅使用 5gb 时显示已满的问题,我进行了恢复出厂设置
所以可能是设备上的内存问题?
【问题讨论】:
-
您能在保存值的位置以及创建 sp 对象的位置发布代码吗?
-
你说的问题似乎不可能,所以为了更清楚,你可以发布你保存值的代码以及创建 sp 对象的位置
-
更新了代码,我也尝试了rebot设备
-
我添加了更多信息,代码应该没问题,因为它可以在其他设备上运行,并且在恢复出厂设置之前它也可以在 nexus 5 上运行