2015-11-02 12 views
2

я могу получить String от общих предпочтений с помощью:Как получить тип объекта предпочтения в Android?

sharedPreferences.getString("key_name","default value"); 

Но как я могу проверить, если key_name на самом деле String?

Что делать, если это значение типа Boolean?

Есть ли способ, мы можем использовать как:

if(sharedPreferences.isTypeOf(Boolean,"key_name")) {} 
+1

None, что является частью SDK. Предполагается, что вы заранее знаете, какой тип данных имеет ваши значения SharedPreferences. – CommonsWare

+0

@CommonsWare это может быть возможно с помощью 'getAll()', который возвращает 'Map ', а затем используя 'instanceof' для проверки типа. Хотя это не имеет никакого смысла – Blackbelt

+0

@ Blackbelt: Полагаю. Тем не менее, это похоже на «размахивание мухой с помощью Buick». :-) – CommonsWare

ответ

4

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

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

0

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

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

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

Все самое лучшее :)

0

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

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