始终强制变量为“long”类型

时间:2017-02-12 09:36:10

标签: java android long-integer classcastexception

我必须保存用户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 ..或者还有其他解决方案吗?

2 个答案:

答案 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();
}