android sharedpreferences map,java - android SharedPreferences and Map - Stack Overflow
In my app I save some user information (i.e. name, weight, height) as key-value-pairs using SharedPreferences.
These information are used in several activities. So I thought, instead of implementing the whole procedure for reading/writing to the SharedPreferences in each activity, I also could implement a class “UserData” and define several static methods. So when I need some user information or want to save them I only use methods of the class “UserData” and this class handles all the stuff in background.
So I did the following things:
class UserData contains a private Map
this map is filled by the getAll()-Method of SharedPreferences
initialization is triggerd in the onCreate()-Method in each activity
providing the values (for each possible type) to a defined key is done by the getValue(String key)-Method
writing (new) information should be done by setter methods
to write back to shared preferences, there is a save function
But now I have a lot of questions:
getAll() method
I expect, that getAll() will read all key-value-pairs from the SharedPreferences. So I would expect, that after initialization data will contain (String,String)-pairs (i.e. “name”;”Max”) as well as (String,Integer)-pairs (i.e. “weight”,85). Am I right?
getting the values
Is the way, how I return the values in getValue(String key) correct? How can I get the value type from such a Map or Map.Entry definition?
adding Entries to the map
I have no idea how to overwrite or write new entries to data. One Idea was, to create a set-method for each type (i.e. String, Integer) I can save in SharedPreferences, create an Entry within this method and then calling an add-method. But how should this looks like?
saving
Will this saving fuction work properly? I’m not realy sure.
Or is this a total stupid approach?
Thanks for your support.
This is my UserData-class
public class UserData {
static private boolean isInit = false;
static private Map data = new HashMap<>();
static void initialize(Context context){
if(UserData.isInit){
return;
}
if(context==null){
return;
}
// read data from memory
SharedPreferences pref = context.getSharedPreferences(context.getString(R.string.app_userdata),Context.MODE_PRIVATE);
UserData.data = pref.getAll();
Log.v(TAG,”loaded “ + UserData.data.size() +” key-value-pairs into map”);
UserData.isInit=true;
}
static void reinitialize(Context context){
UserData.isInit=false;
UserData.initialize(context);
}
static T getValue(String key){
Object value = UserData.data.get(key);
if(value instanceof T){
return (T)value;
}else{
return null;
}
}
static T getValue(String key,T retErr){
T value = getValue(key);
if(value!=null){
return value;
}else{
return retErr;
}
}
static void setString(String key, String str){
}
static void setInteger(String key, Integer i){
}
static private void addElement(Map.Entry element){
}
static void save(Context context){
SharedPreferences pref = context.getSharedPreferences(context.getString(R.string.app_userdata),Context.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
for(Map.Entry pair : UserData.data.entrySet()){
Object value = pair.getValue();
if(value instanceof String){
editor.putString(pair.getKey(),value.toString());
}else if(value instanceof Integer){
editor.putInt(pair.getKey(),(Integer)value);
}else if(value instanceof Float){
editor.putFloat(pair.getKey(),(Float) value);
}else if(value instanceof Boolean){
editor.putBoolean(pair.getKey(),(Boolean) value);
}
}
editor.apply();
}
}
Sample Activity
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
UserData.initialize(getApplicationContext());
}
}
还没有评论,来说两句吧...