ClassCastException java.lang.Integer无法在获取共享首选项值时强制转换为java.lang.Long

问题描述 投票:0回答:1

我正在

java.lang.ClassCastException:无法将java.lang.Integer强制转换为java.lang.Long

如果未在首选项中显示值,则获取共享首选项默认值时例外。下面是我的代码。

public long getLongSharedValue(String key, long def) {
        SharedPreferences settings = context.getSharedPreferences(
                context.getApplicationInfo().packageName + "_prefs", Context.MODE_PRIVATE);
        return settings.getLong(key, def); // Error is logged here...
    }

任何人都可以帮助我解决问题。我尝试过转换强制类型转换,如下所示:

return settings.getLong(key, Long.valueOf(def));

但仍然遇到问题。

错误日志如下:

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
        at android.app.SharedPreferencesImpl.getLong(SharedPreferencesImpl.java:249)
        at package-name.UtilityClass.getLongSharedValue(UtilityClass.java:104)
        at package-name.Fragment1.getPullData(Fragment1.java:130)
        at package-name.Fragment1.onCreateView(Fragment1.java:107)
        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2600)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:881)
        at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)
        at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:439)
        at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:2079)
        at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1869)
        at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1824)
        at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1727)
        at androidx.fragment.app.FragmentManagerImpl$2.run(FragmentManagerImpl.java:150)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6119)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
java android sharedpreferences classcastexception
1个回答
0
投票

当您将值传递给此getLongSharedValue(String,long)时,请确保您要传递的第二个参数值是一个长数据类型值。

因为Log.valueOf()主要接受两个参数类型,即字符串或long。

因为它不适用于您,似乎传递给getLongSharedValue(String,long)第二个参数的值不是一个长值。

© www.soinside.com 2019 - 2024. All rights reserved.