Как получить объект типа предпочтения в Android?


Я могу получить String из общих предпочтений, используя:

sharedPreferences.getString("key_name","default value");
Но как я могу проверить, является ли key_name На самом деле String?

Что, если это булево ключевое значение?

Есть ли метод, который мы можем использовать, например:

if(sharedPreferences.isTypeOf(Boolean,"key_name")) {}
3 2

3 ответа:

Если вы знаете, что получите логическое значение, вы можете использовать

sharedPreferences.getBoolean("key_name",true);

В противном случае вы можете сделать (не проверено, на основе doc )

Map<String, ?> all = sharedPreferences.getAll();
if(all.get("key_name") instanceof String) {
    //Do something
}
else if(all.get("key_name") instanceof Boolean) {
    //Do something else
}

Но предполагается, что вы знаете, что хранится в вашем SharedPrefrences

Ожидается, что вы должны знать тип данных ваших значений SharedPreference.

Все общие предпросмотры, которые вы помещаете, вставляются в карту. Карта не может иметь повторяющихся ключей, содержащих различные значения. Когда вы используете операцию put, она в основном перезаписывает значение, связанное с ключом, если ключ уже существует в карте. Вы можете найти, как работает метод Map "put" здесь - Java Map

Таким образом, проверка instanceof для двух (или нескольких) типов данных как предложенный @Maloubobola, является своего рода абсурдом, так как ключ может иметь только одно значение, и это значение может иметь только один тип данных (который вы должны знать :P). Вы можете сделать это, но это не имеет смысла, как прокомментировал @Blackbelt.

Всего наилучшего:)

Если вы ожидаете строку, вы также можете использовать предложение try / catch:

try {
    String strValue = sharedPreferences.getString("key_name","default value")
    actionIfString();
} catch (ClassCastException e) {
    actionIfNotString();
}