利用SharedPreferences保存List数据

背景

存储List数据到本地的方式有很多种,对于不想用sqlite或者其他方式,又或是数据量很少的话,不妨可以试下用 SharedPreferences保存。由于SharedPreferences只能保存Map型的数据,必须要做其他转换才行。

应用场景

用于保存各种List数据,最常见的莫过于,ListView、Gridviw中的数据和最基本的String类型,支持类型有:

  • List< String >
  • List<Map<String,Object>>
  • List< JavaBean >
  • String

ListDataSave工具类,这里处理的方式时用gson把List转换成json类型,再利用SharedPreferences保存的。Gson是项目必备。这里就不多赘述了。

先搞一个SharedPreferences工具类,用于保存和读取数据:ListDataSave.java

public class ListDataSave {
    private SharedPreferences preferences;
    private SharedPreferences.Editor editor;

    public ListDataSave(Context mContext, String preferenceName) {
        preferences = mContext.getSharedPreferences(preferenceName, Context.MODE_PRIVATE);
        editor = preferences.edit();
    }

    /**
     * 保存普通String
     *
     * @param key
     * @param value
     */
    public void setDataString(String key, String value) {
        if (value == null) {
            return;
        }
        Gson gson = new Gson();
        //转换成json数据,再保存
        String strJson = gson.toJson(value);
        editor.clear();
        editor.putString(key, strJson);
        editor.commit();
    }

    /**
     * 获取普通的String
     * @param key
     * @return
     */
    public String getDataString(String key) {
        String value = "";
        String strJson = preferences.getString(key, null);
        if (null == strJson) {
            return value;
        }
        Gson gson = new Gson();
        value = gson.fromJson(strJson, new TypeToken<String>() {
        }.getType());
        return value;
    }

    /**
     * 保存List
     *
     * @param tag
     * @param datalist
     */
    public <T> void setDataList(String tag, List<T> datalist) {
        if (null == datalist || datalist.size() <= 0)
            return;

        Gson gson = new Gson();
        //转换成json数据,再保存
        String strJson = gson.toJson(datalist);
        editor.clear();
        editor.putString(tag, strJson);
        editor.commit();
    }

    /**
     * 获取List
     *
     * @param tag
     * @return
     */
    public <T> List<T> getDataList(String tag) {
        List<T> datalist = new ArrayList<T>();
        String strJson = preferences.getString(tag, null);
        if (null == strJson) {
            return datalist;
        }
        Gson gson = new Gson();
        datalist = gson.fromJson(strJson, new TypeToken<List<T>>() {
        }.getType());
        return datalist;
    }
}

Bean类根据自己业务来就好了,这里以 UserBean.java 为例

public class Userbean {
	private String name;
	private int age;
 
	public String getName() {
		return name;
	}
 
	public void setName(String name) {
		this.name = name;
	}
 
	public int getAge() {
		return age;
	}
 
	public void setAge(int age) {
		this.age = age;
	}
}

最后是具体的用法:
MainActivity:

public class MainActivity extends Activity implements OnClickListener {
	Context mContext;
	ListDataSave dataSave;
	private ArrayList<Userbean> listBean;
	private ArrayList<String> listString;
	private ArrayList<Map<String, Object>> listMap;
 
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		initView();
 
	}
 
	private void initView() {
		findViewById(R.id.btn_addString).setOnClickListener(this);
		findViewById(R.id.btn_addJavaBean).setOnClickListener(this);
		findViewById(R.id.btn_addMap).setOnClickListener(this);
		findViewById(R.id.btn_getString).setOnClickListener(this);
		findViewById(R.id.btn_getJavaBean).setOnClickListener(this);
		findViewById(R.id.btn_getMap).setOnClickListener(this);
		mContext = getApplicationContext();
		
		//初始化sharedPreferences工具类,参数为xml文件名
		dataSave = new ListDataSave(mContext, "brainbg");
		
		//初始化三种数组
		listString = new ArrayList<String>();
		listBean = new ArrayList<Userbean>();
		listMap = new ArrayList<Map<String, Object>>();
	}
 
	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.btn_addString:
			String s = "小名";
			listString.add(s);
			dataSave.setDataList("string", listString);//保存数据
			break;
			
		case R.id.btn_getString: //sharedPreferences
			Toast.makeText(mContext, dataSave.getDataList("string").toString(), Toast.LENGTH_SHORT).show();
			break;
			
		case R.id.btn_addJavaBean:
			Userbean user = new Userbean();
			user.setName("小白");
			user.setAge(16);
			listBean.add(user);
			dataSave.setDataList("javaBean", listBean);
			break;
			
		case R.id.btn_getJavaBean:
			Toast.makeText(mContext, dataSave.getDataList("javaBean").toString(), Toast.LENGTH_SHORT).show();
			break;
			
		case R.id.btn_addMap:
			Map<String, Object> map=new HashMap<String, Object>();
			map.put("name","大白");
			map.put("age", 18);
			listMap.add(map);
			dataSave.setDataList("listMap", listMap);
			break;
			
		case R.id.btn_getMap:
			Toast.makeText(mContext, dataSave.getDataList("listMap").toString(), Toast.LENGTH_SHORT).show();
			break;
		}
 
	}
 
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 利用SharedPreferences可以方便地保存数据,它是Android中的一个轻量级存储类。下面是使用SharedPreferences保存数据的步骤: 1. 首先,获取SharedPreferences对象: SharedPreferences sharedPreferences = getSharedPreferences("data", Context.MODE_PRIVATE); 这里的"data"是文件名,可以根据需要自定义。 2. 在SharedPreferences对象中,我们可以使用Editor对象来进行数据的编辑和保存SharedPreferences.Editor editor = sharedPreferences.edit(); 3. 使用Editor对象进行数据的编辑和保存,可以向其中添加键值对: editor.putString("name", "John"); // 保存字符串类型数据 editor.putInt("age", 25); // 保存整型数据 editor.putBoolean("isMale", true); // 保存布尔类型数据 在这里,"name"、"age"和"isMale"是键名,可以根据需求自定义。分别保存了字符串类型、整型和布尔类型的数据。 4. 完成数据的编辑后,需要通过commit()方法将数据保存SharedPreferences文件中: editor.commit(); 5. 当需要从SharedPreferences中读取数据时,可以通过键名获取保存数据: String name = sharedPreferences.getString("name", ""); // 获取字符串类型数据,第二个参数是默认值 int age = sharedPreferences.getInt("age", 0); // 获取整型数据,第二个参数是默认值 boolean isMale = sharedPreferences.getBoolean("isMale", false); // 获取布尔类型数据,第二个参数是默认值 以上就是利用SharedPreferences保存数据的基本步骤。SharedPreferences可以用于保存用户的配置信息、用户登录状态等数据,方便快捷地进行读取和修改。 ### 回答2: SharedPreferences是一种用于Android开发的轻量级数据存储方式。它以键值对的形式来存储数据,并且数据可以被多个组件和应用程序共享使用。我们可以使用SharedPreferences保存一些简单的数据,比如用户偏好设置、登录状态、应用程序状态等。 首先,我们需要通过Context对象获取SharedPreferences对象。然后,我们可以使用SharedPreferences对象的edit()方法来获取一个Editor对象,通过Editor对象来写入数据。最后,我们要记得调用commit()方法提交数据的修改。 下面是一个保存数据SharedPreferences的例子: ```java // 获取SharedPreferences对象 SharedPreferences sharedPreferences = getSharedPreferences("MyPreferences", Context.MODE_PRIVATE); // 获取Editor对象 SharedPreferences.Editor editor = sharedPreferences.edit(); // 写入数据 editor.putString("username", "John"); editor.putInt("age", 25); editor.putBoolean("loggedIn", true); // 提交修改 editor.commit(); ``` 在这个例子中,我们创建了一个名为"MyPreferences"的SharedPreferences对象,并通过Editor对象对数据进行了写入操作。我们分别保存了一个用户名、一个年龄和一个登录状态。 我们可以使用getString()、getInt()、getBoolean()等方法来读取保存SharedPreferences中的数据。下面是一个读取数据的例子: ```java // 获取SharedPreferences对象 SharedPreferences sharedPreferences = getSharedPreferences("MyPreferences", Context.MODE_PRIVATE); // 读取数据 String username = sharedPreferences.getString("username", ""); int age = sharedPreferences.getInt("age", 0); boolean loggedIn = sharedPreferences.getBoolean("loggedIn", false); ``` 在这个例子中,我们调用了getString()、getInt()、getBoolean()等方法来读取保存SharedPreferences中的数据,并将数据保存在对应的变量中。 总的来说,利用SharedPreferences保存数据是一种简单而方便的方式。它适用于存储一些简单的应用程序状态或用户偏好设置等数据,但如果需要存储大量的结构化数据,可能不太适合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值