我必须保存用户 ID 这么久。我想强制将用户 ID 保存在长类型的首选项中。问题是如果服务器分配我 22 作为整数类型的用户 ID。我将其传递给保存偏好。由于数字长度较短,因此它保存在 putInt 方法下。如果我检索它,它会说整数不能转换为长整型。下面是我的 prefrence util 类中保存用户 ID 的重载方法。
public int read(String valueKey, int valueDefault) {
return mPreferences.getInt(valueKey, valueDefault);
}
public void save(String valueKey, int value) {
mEditor.putInt(valueKey, value);
mEditor.commit();
}
public long read(String valueKey, long valueDefault) {
return mPreferences.getLong(valueKey, valueDefault);
}
public void save(String valueKey, long value) {
mEditor.putLong(valueKey, value);
mEditor.commit();
}
我想保存用户 ID 并同样检索它。它的作用是,由于数字长度的原因,它预测用户 id 为整数,并将其保存在 put mEditor.putInt(valueKey, value); 下..希望你能理解这种挫败感。我能想到的可能的解决方案是,不要将值传递给这些方法。我只是使用 putLong 方法显式保存用户 ID ..或者还有其他解决方案吗?
最佳答案
您可以使用枚举而不是纯 String
对象:
enum MyProperties{
USER_ID{
void save(long value, WhatEverTypeThisIs mEditor){
mEditor.putLong(valueKey, longVal);
mEditor.commit();
}
long get( WhatEverOtherTypeThisIs mPreferences){
return mPreferences.getLong(name(), valueDefault);
}
},
INT_PROPERTY{
void save(long value, WhatEverTypeThisIs mEditor){
mEditor.putInt(valueKey,(int) longVal);
mEditor.commit();
}
//needs cast to int at caller side
long get( WhatEverOtherTypeThisIs mPreferences){
return mPreferences.getInt(name(), valueDefault);
}
};
abstract void save(long value, WhatEverTypeThisIs mEditor);
abstract long get( WhatEverOtherTypeThisIs mPreferences);
}
用途:
MyProperties.USER_ID.save(22,mEditor);
long id22 = MyProperties.USER_ID.get(mPreferences);
MyProperties.INT_PROPERTY.save(23,mEditor);
int somValue23 = (int)MyProperties.INT_PROPERTY.get(mPreferences);
关于java - 强制变量始终为 'long' 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42186038/