2017-02-12 1 views
0

Мне нужно сохранить идентификатор пользователя как можно дольше. Я хочу, чтобы сохранить идентификатор пользователя в длинном типе предпочтений. какая проблема, если сервер назначит мне 22 как идентификатор пользователя, который является целым типом. и я передаю его предпочтение для сохранения. он сохраняется вместо метода putInt, потому что длина цифры коротка. и если я его извлечу, он говорит, что целое число не может быть отброшено до конца. ниже приведены перегруженные методы в моем классе prefrence, которые сохраняют идентификатор пользователя.Заставить переменную быть «длинным» всегда

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

Я хочу сохранить идентификатор пользователя как можно дольше и получить его как же. что он делает, он предсказывает идентификатор пользователя как целое из-за длины цифр, возможно, и сохранит его под put mEditor.putInt (valueKey, value); .. надеюсь, вы понимаете разочарование. то, что я мог думать о возможном решении, заключается в том, что вместо передачи значения этим методам. Я просто скрываю идентификатор пользователя с помощью метода putLong .. или есть ли другое решение?

+1

Cast на длинный, или использовать буквальное обозначение '22L' – CollinD

+0

@ Усман Гаури Используйте следующее: Long.valueOf (int) ;. –

+0

@CollinD и tushar: спасибо, но это может решить один случай, но может вызвать проблему во всех случаях. сохранение и чтение - это обобщенный метод, который я использую для любых других предпочтений int/long. так что это может быть не самое лучшее решение. –

ответ

0

Вы можете получить значение int (ex: 22) с сервера и передать его методу save(). Там вы можете набирать текст до конца и хранить его в методе putLong. Вот код:

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

это не лучшее решение, так как оно будет использовать любой другой тип предпочтения. –

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

я думаю это возможно решение. я попробую и вернусь с тобой –

Смежные вопросы