我必须保存用户ID。我想在长类型的偏好中强制保存用户ID。如果服务器将我指定为用户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保存为long并将其检索为相同。它的作用是,它可以预测用户id为整数,因为数字长度可能并保存在put mEditor.putInt(valueKey,value)下; ..希望你理解挫折感。我能想到的可能的解决方案是,而不是将值传递给这些方法。我只是用putLong方法显式保存用户ID ..或者还有其他解决方案吗?
答案 0 :(得分:1)
您可以使用枚举而不是纯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);
答案 1 :(得分:0)
您可以从服务器获取int值(例如:22)并将其传递给save()方法。在那里你可以输入cast to long并存储到putLong方法中。这是代码:
public void save(String valueKey, int value) {
Long longVal = (long)value;
mEditor.putLong(valueKey, longVal);
mEditor.commit();
}