我在我的sqlite数据库的共享首选项中跟踪行ID。我当时使用的是int型,但后来我意识到这样做可能会更合适,因为id值会随着时间的流逝而变得巨大。当我尝试从共享首选项获取getLong时,出现此错误:java.lang.ClassCastException:java.lang.Integer无法转换为java.lang.Long

sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
    editor = sharedPreferences.edit();
    workoutId = sharedPreferences.getLong("workoutId", 0);


我的ExerciseId初始化代码是全局变量private long workoutId;
我不确定错误消息中从哪里获取整数值。
也许int会很好吗?

最佳答案

问题出在您的默认值是整数。

你应该用

workoutId = sharedPreferences.getLong("workoutId", 0L);


要么

workoutId = sharedPreferences.getLong("workoutId", (long) 0);

07-24 18:53