2017-02-12 7 views
0

사용자 ID를 오래 저장해야합니다. 나는 긴 유형의 선호도로 사용자 ID를 저장하고 싶다. 어떤 문제가 서버가 정수형 인 사용자 ID 22를 할당하는 경우입니다. 나는 그것을 절약에 대한 환경 설정에 전달합니다. 숫자의 길이가 짧기 때문에 대신 putInt 메소드로 저장합니다. 그리고 만약 그것을 검색하면 정수가 long 형으로 캐스트 될 수 없다고합니다. 아래는 사용자 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 : 감사하지만 그 중 하나의 사례를 해결할 수도 있지만 int 경우 문제가 발생할 수 있습니다. 저장 및 읽기는 다른 모든 int/long 환경 설정에 대해 사용하는 일반화 된 메서드입니다. 그래서 이것은 최상의 솔루션이 아닐 수도 있습니다. –

답변

0

서버에서 int 값 (예 : 22)을 가져 와서 save() 메소드에 전달할 수 있습니다. 거기에 long 형으로 캐스팅하고 putLong 메서드에 저장할 수 있습니다.

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

사용 :

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

다른 모든 int 유형의 기본 설정도 오래도록 캐스팅하므로 최상의 솔루션은 아닙니다. –

1

대신 순수 String 오브젝트의 열거 사용할 수 있습니다

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

나는 이것이 가능한 해결책이라고 생각한다. 내가 너에게 다시 시험해볼거야. –