全新安装APP后,我遇到以下异常:
dp.onEventClicked = function(args) {
bootbox.alert(" " + args.e.text()); //Alert
};
(活动)代码:
初始化时间长(在onCreate之外):
java.lang.RuntimeException: Unable to start activity ...
java.lang.ClassCastException: java.lang.Integer cannot be cast to
java.lang.Long
从pefs-或默认为0L(在onCreate中)指定以前的长值:
long spinTimer = 0L;
应该很长,int来自何处?
其他代码引用,其中sharepref获取其值(全长):
spinTimer = settings.getLong("spinTimer", 0L);
清除APP数据后,一切都很好。每次我重新安装APP时都不应该这样做。
世界上是如何偷偷溜进去的?
请求DEBUG INFO - 不标准,但认为这应该足够了:
发生崩溃的相关代码行(简单活动):
if (item.equals("Select...")) {editor.putLong("spinTimer", 0L);}
if (item.equals("5 mins")) {editor.putLong("spinTimer", System.currentTimeMillis() + (5 * 60 * 1000));}
if (item.equals("10 mins")) {editor.putLong("spinTimer", System.currentTimeMillis() + (10 * 60 * 1000));}
if (item.equals("15 mins")) {editor.putLong("spinTimer", System.currentTimeMillis() + (15 * 60 * 1000));}
if (item.equals("30 mins")) {editor.putLong("spinTimer", System.currentTimeMillis() + (30 * 60 * 1000));}
if (item.equals("1 hour")) {editor.putLong("spinTimer", System.currentTimeMillis() + (60 * 60 * 1000));}
editor.commit();
spinTimer = settings.getLong("spinTimer", 0L);
输出:
log.debug("***Activity Start***");
log.debug("OnCreateEnter");
SharedPreferences settings =
PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = settings.edit();
log.debug("spinTimer: {}", spinTimer);
spinTimer = settings.getLong("spinTimer", 0L); // <-- APP crashes right here
1)如果没有分配任何内容,是否应该将.getLong(0L)的第二个参数赋值给变量(spinTimer)?我也试过'0'。
2)如何分配int?键'spinTimer'(0L)和var'spinTimer'('long spinTimer = 0L;')都被初始化为long。
3)如果我清除APP数据(全新安装后) - 一切都很好;
4)如果我在上述陈述之前添加以下代码行 - 一切顺利(但这种方法偏向于我的逻辑):
***Activity Start***
OnCreateEnter
spinTimer: 0
答案 0 :(得分:2)
java.lang.ClassCastException: java.lang.Integer cannot be cast to
java.lang.Long
由于 ClassCastException
问题,您应该使用Long.valueOf
。
返回表示指定long值的Long实例。如果一个 新的Long实例不是必需的,这个方法一般应该是 优先使用构造函数Long(long),就像这个方法一样 可能会产生明显更好的空间和时间表现 缓存频繁请求的值。注意,不像 在Integer类中对应的方法,不需要此方法 缓存特定范围内的值。
editor.putLong("spinTimer", Long.valueOf(System.currentTimeMillis() + (5 * 60 * 1000))