Android之SharedPreferencesUtils,支持对象,List

有3点厉害的地方

1.使用方便,因为获取了泛型T的class

2.用流处理对象的转化

3.支持List

package com.example.test;

import android.content.Context;
import android.content.SharedPreferences;
import android.util.Base64;
import android.util.Log;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;

public abstract class SharedPreferencesUtils<T> {
    private Context context;
    private Class<T> clx;
    private String fileName;
private String fileName = "default";

private int mode = Context.MODE_PRIVATE; public SharedPreferencesUtils(Context context) { this.context = context; } public SharedPreferencesUtils(Context context, Class<T> clx) { this.context = context; this.clx = clx; } public SharedPreferencesUtils setFileName(String fileName) { this.fileName = fileName; return this; } public void put(String key, String val) { SharedPreferences sp = context.getSharedPreferences(fileName, mode); SharedPreferences.Editor editor = sp.edit(); editor.putString(key, val); editor.apply(); } public void put(String key, int val) { SharedPreferences sp = context.getSharedPreferences(fileName, mode); SharedPreferences.Editor editor = sp.edit(); editor.putInt(key, val); editor.apply(); } public void put(String key, boolean val) { SharedPreferences sp = context.getSharedPreferences(fileName, mode); SharedPreferences.Editor editor = sp.edit(); editor.putBoolean(key, val); editor.apply(); } public void put(String key, float val) { SharedPreferences sp = context.getSharedPreferences(fileName, mode); SharedPreferences.Editor editor = sp.edit(); editor.putFloat(key, val); editor.apply(); } public void put(String key, long val) { SharedPreferences sp = context.getSharedPreferences(fileName, mode); SharedPreferences.Editor editor = sp.edit(); editor.putLong(key, val); editor.apply(); } public void put(String key, Object val) { ByteArrayOutputStream bos = new ByteArrayOutputStream(); try { ObjectOutputStream os = new ObjectOutputStream(bos); os.writeObject(val); } catch (IOException e) { e.printStackTrace(); } byte[] bytes = bos.toByteArray(); String base64String = Base64.encodeToString(bytes, Base64.NO_WRAP); put(key, base64String); } public T get(String key) { SharedPreferences sp = context.getSharedPreferences(fileName, Context.MODE_PRIVATE); Class<T> tClass = (Class<T>) ((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0]; if (tClass == String.class) { return (T) sp.getString(key, ""); } else if (tClass == Integer.class) { return (T)(Integer)sp.getInt(key, 0); } else if (tClass == Float.class) { return (T)(Float)sp.getFloat(key, 0.0f); } else if (tClass == Long.class) { return (T)(Long)sp.getLong(key, 0L); } else if (tClass == Boolean.class) { return (T)(Boolean)sp.getBoolean(key, false); } else { String s = sp.getString(key, ""); byte[] bytes = Base64.decode(s, Base64.NO_WRAP); ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes); ObjectInputStream objectInputStream; try { objectInputStream = new ObjectInputStream(byteArrayInputStream); try { return (T)objectInputStream.readObject(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } catch (IOException e) { e.printStackTrace(); } return null; } } public List<T> getList(String key) { SharedPreferences sp = context.getSharedPreferences(fileName, Context.MODE_PRIVATE); String s = sp.getString(key, ""); Class<T> tClass = (Class<T>) ((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0]; byte[] bytes = Base64.decode(s, Base64.NO_WRAP); ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes); ObjectInputStream objectInputStream = null; try { objectInputStream = new ObjectInputStream(byteArrayInputStream); try { //我不知道能否直接强转 sorry return (List<T>) objectInputStream.readObject(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } catch (IOException e) { e.printStackTrace(); } return null; }}

如果用fastJson会很方便,但是这是工具类,为了这个工具类去下载一个jar包?肯定不划算啊,所以必须也要封装一个流转化形式的


使用起来非常方便

new 一下,set一下FileName,条理很清晰,最后放就是put,取就是get

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值