SharedPreferences 똑똑하게 사용하기.

2020. 12. 9. 16:25 안드로이드/개발 TIP

예전에 우리가 자바에서 사용하던 방법

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("key","value");
editor.apply();

 

코틀린으로 사용하면?

private val pref = PreferenceManager.getDefaultSharedPreferences(context)

    @Suppress("IMPLICIT_CAST_TO_ANY")
    fun<T> get(key: String, defaultValue: T): T {
        return when (defaultValue) {
            is String -> pref.getString(key, defaultValue)
            is Int -> pref.getInt(key, defaultValue)
            is Boolean -> pref.getBoolean(key, defaultValue)
            is Float -> pref.getFloat(key, defaultValue)
            is Long -> pref.getLong(key, defaultValue)
            else -> throw UnsupportedOperationException("Not yet implemented")
        } as T
    }

 

Config같은 것을 저장해야 하는데 DB는 번거롭다.

 

gson을 사용하여 json형태로 저장

val res = Gson().toJson(jsonText)
pref.save(key, res)

 

gson을 이용하여 클래스를 꺼내기 

fun getConfig(sharedPref: SharedPreferenceProvider, key: String) : Config {
    var res = sharedPref.get(key, "")
    val type = object : TypeToken<Config>() {}.type
    if(res.isEmpty()) {
    res = Link().toString()
    }
    return Gson().fromJson(res, type)
}

 

gson을 이용하여 리스트를 꺼내기

fun getConfig(sharedPref: SharedPreferenceProvider) : List<Config> {
    var res = sharedPref.get("key", "")
    val type = object : TypeToken<List<Config>>() {}.type
    if(res.isEmpty()) {
    res = emptyArray<List<Config>>().asList().toString()
    }
    return Gson().fromJson(res, type)
}



출처: https://akaisun.tistory.com/66?category=622886 [아카이의 개발창고]