首页 > 其他分享 >Android 集合数据在Sharedpreferences中的增删改查

Android 集合数据在Sharedpreferences中的增删改查

时间:2023-03-12 11:05:02浏览次数:41  
标签:mContext name 改查 sp list Sharedpreferences Android null size


Android 集合数据在Sharedpreferences中的增删改查

Sharedpreferences作为一个轻量化的Android本地存储方式

相信很多人都为其不能存集合而烦恼

所以呢,我封了两个简易的方法

希望有幸能帮到同仁

这个方法是~增(传入要保存的集合)~删(传null或者size为0)~改(新集合覆盖集合)

/*
*作者:赵星海
*时间:18/06/08 09:51
*用途:增改sp的数组 name-自定义集合的名称
*/
public static boolean setArray(Context mContext, List<String> list,String name) {
SharedPreferences sp = mContext.getSharedPreferences(name+"List", mContext.MODE_PRIVATE);
SharedPreferences.Editor mEdit1 = sp.edit();

if (list==null){ //清空
mEdit1.putInt(name+"size", 0);
int size = sp.getInt(name+"size", 0);
for (int i = 0; i < size; i++) {
if (sp.getString(name + i, null) != null) {
mEdit1.remove(name + i);
}
}
}else {
if (list.size()==0){ //清空
mEdit1.putInt(name+"size", 0);
int size = sp.getInt(name+"size", 0);
for (int i = 0; i < size; i++) {
if (sp.getString(name + i, null) != null) {
mEdit1.remove(name + i);
}
}
}else {
mEdit1.putInt(name+"size", list.size());
if (list.size() > 10) {
list.remove(0); //只保留后10条记录
}
for (int i = 0; i < list.size(); i++) {
mEdit1.remove(name + i);
mEdit1.remove(new Gson().toJson(list.get(i)));//删除重复数据 先删后加
mEdit1.putString(name + i, list.get(i));
}
}
}
return mEdit1.commit();
}

这个方法是~查(输入集合的命名直接拿)

/*
*作者:赵星海
*时间:18/06/08 09:51
*用途:加载sp的数组 name-自定义集合的名称
*/
public static List<String> getArray(Context mContext,String name) {
ArrayList<String> list = new ArrayList<String>();
if (mContext.getSharedPreferences(name+"List", mContext.MODE_PRIVATE) != null) {
SharedPreferences mSharedPreference1 = mContext.getSharedPreferences(name+"List", mContext.MODE_PRIVATE);
int size = mSharedPreference1.getInt(name+"size", 0);
for (int i = 0; i < size; i++) {
if (mSharedPreference1.getString(name + i, null) != null) {
list.add(mSharedPreference1.getString(name + i, null));
}
}
}
return list;
}

 升级版: 直接存储对象:升级日期:2021年8月27日14:19

//使用前确保项目导入了gson的依赖,如没导入直接拷贝:    api 'com.google.code.gson:gson:2.6.2'

public class SDFUtils {

/*
*作者:赵星海
*用途:增改sp的数组 name-自定义集合的名称
*/
public static <T> Boolean setArray(Context mContext, List<T> list, String name) {
SharedPreferences sp = mContext.getSharedPreferences(name+"List", Context.MODE_PRIVATE);
SharedPreferences.Editor mEdit = sp.edit();
if (list==null || list.size()==0){ //清空
mEdit.putInt(name+"size", 0);
int size = sp.getInt(name+"size", 0);
for (int i = 0; i < size; i++) {
if (sp.getString(name + i, null) != null) {
mEdit.remove(name + i);
}
}
}else {
mEdit.putInt(name+"size", list.size());
if (list.size() > 10) {
list.remove(0); //只保留后10条记录
}
for (int i = 0; i < list.size(); i++) {
mEdit.remove(name + i);
mEdit.remove(new Gson().toJson(list.get(i)));//删除重复数据 先删后加
mEdit.putString(name + i, new Gson().toJson(list.get(i)));
}
}
return mEdit.commit();
}
/*
*作者:赵星海
*用途:加载sp的数组 name-自定义集合的名称
*/
public static <T> List<T> getArray(Context mContext, String name, T bean) {
ArrayList<T> list = new ArrayList<T>();
if (mContext.getSharedPreferences(name+"List", Context.MODE_PRIVATE) != null) {
SharedPreferences mSharedPreference1 = mContext.getSharedPreferences(name+"List", Context.MODE_PRIVATE);
int size = mSharedPreference1.getInt(name+"size", 0);
for (int i = 0; i < size; i++) {
if (mSharedPreference1.getString(name + i, null) != null) {
try{
list.add((T) new Gson().fromJson(mSharedPreference1.getString(name + i, null), bean.getClass()));
}catch (Exception e){
e.printStackTrace();
}
}
}
}
return list;
}

}

注意事项:

就一句: 集合名字不能相同,卸载app数据会消失

标签:mContext,name,改查,sp,list,Sharedpreferences,Android,null,size
From: https://blog.51cto.com/u_13520184/6115610

相关文章

  • Android 时间戳 转换成 多少天前、多少小时前、多少分钟前
     最新深海发现一个非常好用的方法,分享给大家DateUtils.getRelativeTimeSpanString("时间戳").toString();返回结果为: "1天前"或者 "1小时前"或者 "1分钟前"1.不用任......
  • Android Js交互,调起Js中的方法
    //调用PC端方法例如方法名为:editBtn()if(Build.VERSION.SDK_INT<18){mWebView.loadUrl("javascript:editBtn()");......
  • Android Base64转BitMap
                  AndroidBase64转BitMap 使用场景:微信付款码,图片验证码.等...为了节省服务器存储,将图片以Base64的形式存储.方法如下:导包......
  • Android 手机号正则判断
    //手机号判断true为通过验证publicstaticbooleanisChinaPhoneLegal(Stringstr)throwsPatternSyntaxException{if(str==null){return......
  • Android 通过重写EditText,实现最简单的@好友
    4月份的代码,有人要用的话直接粘贴过去用就可以/**作者:赵星海*时间:18/04/2310:28*用途:@好友的实现*/publicclassMsgEditTextextendsAppCompatEditText{pub......
  • Android与H5(JavaScript)之间的简单交互
    Android响应Js的动作 假设网页端要调用Android原生的方法:showToast();1.做一个盆子接收消息(创建一个工具类,写一个方法(*带注解))publicclassJavaScriptMethod{......
  • Android资源文件特殊字符转义编码
    举个栗子啊,我今天用了@这个符号写了好多次都没写成功,原因出在哪里:"&#64;好友"这样就报红;"&#64;好友"这样就没事了 .所以呢以下的 某些编码不允许放在开头,到前......
  • Android透明状态栏和沉浸式的实现
    Android透明状态栏和沉浸式的实现1.什么是沉浸式根据百度百科上的定义,沉浸式就是要给用户提供完全沉浸的体验,使用户有一种置身于虚拟世界之中的感觉。其真正含义并不是大家......
  • Android 控件模拟点击和事件转移
    直接上代码 想看的看一下吧 主要是每次用到都忘记这个方法名... 记录一下子//焦点转移mContentTv.setOnClickListener(newView.OnClickListener(){......
  • Android中点击按钮获取星级评分条的评分
    场景效果 注:关注公众号霸道的程序猿获取编程相关电子书、教程推送与免费下载。实现将布局改为LinearLayout,并通过android:orientation="vertical">设置为垂直布局,然后添......