gpt4 book ai didi

android - SharedPreferences.getInt ("cumulative", 0) catch 22 - 如何解决?

转载 作者:太空宇宙 更新时间:2023-11-03 12:42:07 25 4
gpt4 key购买 nike

与其他值不同,我可以在每次应用启动时在 onCreate() 中初始化:

  @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Editor editor = prefs.edit();
editor.putInt("re-initiative-value", 0);
editor.commit();
}

存储在 SharedPreferences 中的累积值对我来说是个问题(我无法在每次程序启动时重新初始化它)。

因此,每当我尝试 prefs.getInt("cumulative-valuee", 0) 时,我都会收到 RuntimeException:

05-12 16:45:50.489: ERROR/AndroidRuntime(1767): FATAL EXCEPTION: main
05-12 16:45:50.489: ERROR/AndroidRuntime(1767): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1234, result=-1, data=Intent { (has extras) }} to activity {com.example.app/com.example.app.MyActivity}: java.lang.ClassCastException: java.lang.String
05-12 16:45:50.489: ERROR/AndroidRuntime(1767): at android.app.ActivityThread.deliverResults(ActivityThread.java:3515)
05-12 16:45:50.489: ERROR/AndroidRuntime(1767): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3557)
05-12 16:45:50.489: ERROR/AndroidRuntime(1767): at android.app.ActivityThread.access$2800(ActivityThread.java:125)
05-12 16:45:50.489: ERROR/AndroidRuntime(1767): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2063)
05-12 16:45:50.489: ERROR/AndroidRuntime(1767): at android.os.Handler.dispatchMessage(Handler.java:99)
05-12 16:45:50.489: ERROR/AndroidRuntime(1767): at android.os.Looper.loop(Looper.java:123)
05-12 16:45:50.489: ERROR/AndroidRuntime(1767): at android.app.ActivityThread.main(ActivityThread.java:4627)
05-12 16:45:50.489: ERROR/AndroidRuntime(1767): at java.lang.reflect.Method.invokeNative(Native Method)
05-12 16:45:50.489: ERROR/AndroidRuntime(1767): at java.lang.reflect.Method.invoke(Method.java:521)
05-12 16:45:50.489: ERROR/AndroidRuntime(1767): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-12 16:45:50.489: ERROR/AndroidRuntime(1767): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-12 16:45:50.489: ERROR/AndroidRuntime(1767): at dalvik.system.NativeStart.main(Native Method)
05-12 16:45:50.489: ERROR/AndroidRuntime(1767): Caused by: java.lang.ClassCastException: java.lang.String
05-12 16:45:50.489: ERROR/AndroidRuntime(1767): at android.app.ContextImpl$SharedPreferencesImpl.getInt(ContextImpl.java:2707)

避免此类异常的好策略是什么?

我正在考虑将对 getInt() 的调用放在 try-catch 子句中,这样我就可以在第一次程序启动时编写它,但后来我意识到:getInt() 中的默认值不是吗(第二个参数) 正是这种情况下的意思?

更新:为了验证@MyBD 的建议,我添加了以下代码以在首次运行时转储所有首选项名称和值:

PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
prefs = PreferenceManager.getDefaultSharedPreferences(this);

Map<String,?> allPrefs = prefs.getAll();
for (Map.Entry<String, ?> entry : allPrefs.entrySet())
Log.i("allPrefs", entry.getKey() + "/" + entry.getValue());

生成的日志显示没有类型不匹配。

这一定是一个伪装成 java.lang.ClassCastException 的不同问题。

最佳答案

从你的异常(exception)来看,你似乎确实有这个字符串首选项的名称,而不是这个首选项不存在:

05-12 16:45:50.489: ERROR/AndroidRuntime(1767): Caused by: java.lang.ClassCastException: java.lang.String
05-12 16:45:50.489: ERROR/AndroidRuntime(1767): at android.app.ContextImpl$SharedPreferencesImpl.getInt(ContextImpl.java:2707)

来自 documentation :

Returns the preference value if it exists, or defValue. Throws ClassCastException if there is a preference with this name that is not an int.

如果您更改其名称,它应该可以工作。

关于android - SharedPreferences.getInt ("cumulative", 0) catch 22 - 如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5984507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com