2017-02-12 5 views
0

ユーザーIDを長く保存する必要があります。私は強制的に長いタイプの設定でユーザーIDを保存したい。どのような問題は、サーバが整数型のユーザIDとして私に22を割り当てるかどうかです。私はそれを保存のために優先させます。桁の長さが短いため、代わりにputIntメソッドの下に保存します。私はそれを取得した場合、整数はキャストできず、長時間キャストできないと言います。以下は、ユーザIDを保存する私のprefrence utilクラスのメソッドのオーバーロードです。変数に 'long'型の変数を強制的に指定する

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を保存..または他のソリューションはありますか?

+1

キャスト、またはリテラルの表記を使用22L' – CollinD

+0

@Usman Ghauri次を使用します。Long.valueOf(int);. –

+0

@CollinDとtushar:ありがとうございますが、これは1つのケースを解決するかもしれませんが、intの場合に問題を引き起こす可能性があります。保存と読み込みは、他のすべてのint/long環境設定に使用する一般化されたメソッドです。だからこれは最善の解決策ではないかもしれません。 –

答えて

0

サーバからint値(例:22)を取得し、save()メソッドに渡すことができます。そこにあなたはlong型にキャストしてputLongメソッドに格納することができます。ここでは、コードは次のようになります。

public void save(String valueKey, int value) { 
    Long longVal = (long)value; 
    mEditor.putLong(valueKey, longVal); 
    mEditor.commit(); 
} 
+1

これは他のint型の優先度も長めにキャストするので、これは最善の解決策ではありません。 –

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); 
} 

用途: `longに

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); 
+0

これは可能な解決策だと思います。私はあなたとやり直してみるよ –

関連する問題