【问题标题】:Combining SharedPreferences with preference将 SharedPreferences 与偏好相结合
【发布时间】:2016-04-08 06:23:46
【问题描述】:

结合SharedPreferences 与偏好 我希望在设置中使用整数并且应用程序崩溃了:

MainActivity.java:

SharedPreferences SP = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
    int car = SP.getInt("hourly_key", 0);
    int wage = SP.getInt("car_key",0);

prefs_general.xml:

<EditTextPreference
    android:capitalize="words"
    android:defaultValue="@integer/pref_default_hourly_name"
    android:inputType="number"
    android:key="hourly_key"
    android:maxLines="1"
    android:selectAllOnFocus="true"
    android:singleLine="true"
    android:title="@string/pref_title_hourly_name"
    />

<EditTextPreference
    android:capitalize="words"
    android:defaultValue="@integer/pref_default_car_name"
    android:inputType="number"
    android:key="car_key"
    android:maxLines="1"
    android:selectAllOnFocus="true"
    android:singleLine="true"
    android:title="@string/pref_title_car_name" />

strings.xml:

<string name="pref_title_hourly_name">Hourly wage</string>
<integer name="pref_default_hourly_name">30</integer>

<string name="pref_title_car_name">Daily car expense</string>
<integer name="pref_default_car_name">15</integer>

日志:

4-08 09:30:03.805 14350-14350/com.michlind.nanytime E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.michlind.nanytime, PID: 14350
java.lang.RuntimeException: Unable to resume activity {com.michlind.nanytime/com.michlind.nanytime.MainActivity}: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3103)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3134)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2481)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5422)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
at android.app.SharedPreferencesImpl.getInt(SharedPreferencesImpl.java:242)
at com.michlind.nanytime.MainActivity.onPostResume(MainActivity.java:32)
at android.app.Activity.performResume(Activity.java:6351)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3092)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3134) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2481) 
at android.app.ActivityThread.-wrap11(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5422) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

【问题讨论】:

  • 显示 logcat 输出
  • 如果您的应用出现崩溃,请发帖Required Stack Trace

标签: android sharedpreferences


【解决方案1】:

当您使用 getInt() 加载它时,您的 preference 类型是 String,这是错误的。你应该改用getString()

编辑


为了让您真正将值保存为整数,您必须编写自己的自定义类否则您应该使用
Integer.parseInt(pref.getString("v","9"));

【讨论】:

  • 你在哪里看到我的偏好类型是字符串?但我希望将其设置为 Int
  • P.S:请确保您检查 null 否则您可能会遇到 NPE
猜你喜欢
  • 2014-07-30
  • 2019-12-02
  • 2012-05-19
  • 2020-05-04
  • 1970-01-01
  • 2014-10-23
  • 2011-08-11
  • 2011-11-13
  • 2013-04-13
相关资源
最近更新 更多