Last active
February 26, 2016 13:47
-
-
Save timfreiheit/ab49102611f24dc45ecf to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.content.SharedPreferences; | |
import android.support.annotation.NonNull; | |
import com.f2prateek.rx.preferences.Preference; | |
/** | |
* Caches an result in memory to avoid fetching and parsing it for every call | |
* IMPORTANT: the value will not update automatically if you change the preferences in another way than using | |
* {@link Preference#set(Object)} | |
* Created by timfreiheit on 05.12.15. | |
*/ | |
public class CachingPrefsAdapter<T> implements Preference.Adapter<T> { | |
Preference.Adapter<T> adapter; | |
T t; | |
public CachingPrefsAdapter(Preference.Adapter<T> adapter){ | |
this.adapter = adapter; | |
} | |
@Override | |
public T get(@NonNull String key, @NonNull SharedPreferences preferences) { | |
if (t == null) { | |
t = adapter.get(key, preferences); | |
} | |
return t; | |
} | |
@Override | |
public void set(@NonNull String key, @NonNull T value, @NonNull SharedPreferences.Editor editor) { | |
t = value; | |
adapter.set(key, value, editor); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.content.SharedPreferences; | |
import android.support.annotation.NonNull; | |
import com.f2prateek.rx.preferences.Preference; | |
import com.google.gson.Gson; | |
/** | |
* Preferences Adapter to use gson for serializing | |
* Created by timfreiheit on 05.12.15. | |
*/ | |
public class GsonPrefsAdapter<T> implements Preference.Adapter<T> { | |
final Gson gson; | |
private Class<T> clazz; | |
private T defaultValue; | |
public GsonPrefsAdapter(Class<T> clazz){ | |
this(new Gson(), clazz); | |
} | |
public GsonPrefsAdapter(Gson gson, Class<T> clazz){ | |
this(new Gson(), clazz, null); | |
} | |
public GsonPrefsAdapter(Gson gson, Class<T> clazz, T defaultValue){ | |
this.gson = gson; | |
this.clazz = clazz; | |
this.defaultValue = defaultValue; | |
} | |
@Override | |
public T get(@NonNull String key, @NonNull SharedPreferences preferences) { | |
String json = preferences.getString(key, null); | |
if (json == null) { | |
return defaultValue; | |
} | |
return gson.fromJson(json, clazz); | |
} | |
@Override | |
public void set(@NonNull String key, @NonNull T value, @NonNull SharedPreferences.Editor editor) { | |
editor.putString(key, gson.toJson(value)); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment