android sharedpreferences map,java - android SharedPreferences and Map - Stack Overflow

短命女 2022-10-05 09:54 325阅读 0赞

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());

}

}

发表评论

表情:
评论列表 (有 0 条评论,325人围观)

还没有评论,来说两句吧...

相关阅读

    相关 七、androidSharedPreferences

    很多时候我们开发的软件需要向用户提供软件参数设置功能,例如我们常用的QQ,用户可以设置是否允许陌生人添加自己为好友。对于软件配置参数的保存,如果是window软件通常我们会采用