Samsung Galaxy Tab A 10.1上的SharedPreferences java.lang.ClassCastException

时间:2017-11-28 14:10:01

标签: android sharedpreferences

今天我在Samsung Galaxy Tab A 10.1上发现了一个关于SharedPreferences

的错误

我正在拯救长期:

    private static final String PREF_IDE_CULTIVO_WORK_REPORT = "ID_CULTIVO_WORK_REPORT";
    private static final String PREFNAME = "PREFERENCES";

 public static void init(Context context){
        sharedPreferences = context.getSharedPreferences(PREFNAME, 0);
        editor = sharedPreferences.edit();
    }
     public static Long getIdCultivoWorkReport(){
            if (sharedPreferences == null){
                return null;
            }
            return sharedPreferences.getLong(PREF_IDE_CULTIVO_WORK_REPORT, 0);
        }
        public static void setIdCultivoWorkReport(Long b){
            if (sharedPreferences == null){
                return;
            }
            editor.putLong(PREF_IDE_CULTIVO_WORK_REPORT, b);
            editor.commit();
        }

在一个班级中我设定了一个值;

 PreferenceManager.setIdCultivoWorkReport(Long.valueOf(document.getPlantation().getId()));

在其他课程中,我得到了值:

       if (PreferenceManager.getIdCultivoWorkReport() == 0 || PreferenceManager.getIdCultivoWorkReport() == null ) {
            allParcelList.addAll(WorkReportController.getParcelsByPlantation(plantationId));
            allSowingList.addAll(WorkReportController.getSowingsByPlantation(plantationId));
        } else{
//get other values
}

在Galaxy Tab A上我在其他平板电脑模型上崩溃可以正常运行

  

java.lang.ClassCastException:at   android.app.SharedPreferencesImpl.getLong   (SharedPreferencesImpl.java:249)at   es.app.company.utils.PreferenceManager.getIdCultivoWorkReport   (PreferenceManager.java:294)at   es.app.company.ui.workreport.WorkReportEditTaskFragment.onActivityCreated   (WorkReportEditTaskFragment.java:130)at   android.support.v4.app.Fragment.performActivityCreated   (Fragment.java:1970)at   android.support.v4.app.FragmentManagerImpl.moveToState   (FragmentManager.java:1041)at   android.support.v4.app.FragmentManagerImpl.moveToState   (FragmentManager.java:1197)at   android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)   在android.support.v4.app.FragmentManagerImpl.execPendingActions   (FragmentManager.java:1562)at   android.support.v4.app.FragmentManagerImpl $ 1.run   (FragmentManager.java:483)在android.os.Handler.handleCallback   (Handler.java:739)在android.os.Handler.dispatchMessage上   (Handler.java:95)在android.os.Looper.loop(Looper.java:148)at   android.app.ActivityThread.main(ActivityThread.java:7303)at   java.lang.reflect.Method.invoke(Native Method)at   com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run   (ZygoteInit.java:1230)com.android.internal.os.ZygoteInit.main   (ZygoteInit.java:1120

我做错了什么?

1 个答案:

答案 0 :(得分:0)

如果您更改代码中条目的类型(例如,如果使用的应用的先前版本为editor.putString(PREF_IDE_CULTIVO_WORK_REPORT, "1");),则会出现此错误

如果您使用getLong()块实现自己的本地try catch,则可以解决此问题。

如果您再次卸载然后安装应用程序,则将删除包含sharedPreferences数据的本地文件,并且该选项卡上的问题应该消失。