Android java.lang.Long无法强制转换为java.lang.String

时间:2018-07-02 23:49:27

标签: android sharedpreferences

好的,所以我使用

在我的共享首选项中存储了很长的时间
e.putLong("startTime", SystemClock.uptimeMillis());

我从类似的共享首选项中获取它

SHARED_PREFS = context.getSharedPreferences(LOCAL_PREF, MODE_PRIVATE);
long startTime = SHARED_PREFS.getLong("startTime", 0L); <-- Stack trace points to this line.

但是我在某些设备上收到此错误,并且不确定为什么,我根本没有尝试将其强制转换为String

java.lang.Long cannot be cast to java.lang.String

我发现所有尝试将其设置为String值的指向,而我根本没有尝试这样做,而是尝试直接使用long值。

**更新堆栈跟踪**

Caused by: java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.String
        at android.app.SharedPreferencesImpl.getString(SharedPreferencesImpl.java:255)
        at com.tech.utility.Tools.refreshPrefs(Tools.java:193)
        at com.tech.activity.Menu_dashboard.onStart(Menu_dashboard.java:762)
        at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1340)
        at android.app.Activity.performStart(Activity.java:7191)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2920)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
        at android.app.ActivityThread.-wrap11(Unknown)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6940)
        at java.lang.reflect.Method.invoke(Method.java:-2)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

2 个答案:

答案 0 :(得分:2)

如果要使用read the docs,您会发现getLong方法将:

  

如果此名称的首选项不长,则抛出ClassCastException。

因此,在应用程序中的其他位置,您必须调用:

e.putLong("startTime", "someString");

答案 1 :(得分:1)

这有点晚了,但是对于仍然面临此问题的用户,只需在调用get方法之前使用所需类型的值覆盖SharedPreferences中的该值即可。也许以前在这里写过一个String(或其他类型)