轻量级存储 就是把数据保存在系统里面 但是APP被卸载了 这些数据也就没有了
简单的一两个缓存数据
// 存储数据到缓存 塞入要保存的字符串
public void SharedPreferences_data(String data) {
SharedPreferences preferences = getSharedPreferences("user", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString(data, data); //这里的两个参数 后者是存储下来的值 前者是一个标记 存储到内存当中的标记 根据这个可以提取出内容
editor.commit();
}
// 读取缓存数据
public String extract() {
SharedPreferences preferences = getSharedPreferences("user", Context.MODE_PRIVATE);
String data = preferences.getString("data", "null");
return data;
}
存储数组
就是把数据转成String 来存 取出来的时候 转一下就好
//写入
List<String> StringData = new ArrayList<>();
for (int i = 0; i < 50; i++) {
StringData.add(i + "");
}
String data = JsonUtil.toJson(StringData);
SharedPreferences preferences = getSharedPreferences("user", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("dataList", data);
editor.commit();
读取数组
String name = preferences.getString("dataList", "没有内容");// 第二个参数是 没有数据的时候返回的内容
图片缓存 这个比较特殊
//图片存储
private void saveBitmapToSharedPreferences(Bitmap bitmap){
// Bitmap bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
//第一步:将Bitmap压缩至字节数组输出流ByteArrayOutputStream
ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 80, byteArrayOutputStream);
//第二步:利用Base64将字节数组输出流中的数据转换成字符串String
byte[] byteArray=byteArrayOutputStream.toByteArray();
String imageString=new String(Base64.encodeToString(byteArray, Base64.DEFAULT));
//第三步:将String保持至SharedPreferences
SharedPreferences sharedPreferences=getSharedPreferences("testSP", Context.MODE_PRIVATE);
SharedPreferences.Editor editor=sharedPreferences.edit();
editor.putString("image", imageString);
editor.commit();
}
// 拿 图片缓存
private void getBitmapFromSharedPreferences(){
SharedPreferences sharedPreferences= getSharedPreferences("testSP", Context.MODE_PRIVATE);
//第一步:取出字符串形式的Bitmap
String imageString=sharedPreferences.getString("image", "");
//第二步:利用Base64将字符串转换为ByteArrayInputStream
byte[] byteArray=Base64.decode(imageString, Base64.DEFAULT);
ByteArrayInputStream byteArrayInputStream=new ByteArrayInputStream(byteArray);
//第三步:利用ByteArrayInputStream生成Bitmap
Bitmap bitmap=BitmapFactory.decodeStream(byteArrayInputStream);
if (bitmap == null) {
bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.portrait);
}else{
ivHead.setImageBitmap(bitmap);
}
}
附带一个 工具类吧
记得导包 compile 'com.google.code.gson:gson:2.7'
public class JsonUtil {
private static Gson gson = null;
static {
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(JsonObject.class, new JsonDeserializer<Object>() {
@Override
public Object deserialize(JsonElement jsonElement, Type type,
JsonDeserializationContext jsonDeserializationContext)
throws JsonParseException {
JsonObject jsonObject = jsonElement.getAsJsonObject();
return jsonObject;
}
});
gson = builder.disableHtmlEscaping().create();
}
public static String toJson(Object object) {
if (object == null) {
return null;
}
return gson.toJson(object);
}
public static <T> T fromJson(String content, Class<T> clazz) {
if (StringUtil.isEmpty(content) || clazz == null) {
return null;
}
try {
return gson.fromJson(content, clazz);
} catch (JsonSyntaxException e) {
e.printStackTrace();
return null;
}
}
public static <T> T fromJson(String content, TypeToken<T> token) {
if (StringUtil.isEmpty(content) || token == null) {
return null;
}
try {
return gson.fromJson(content, token.getType());
} catch (JsonSyntaxException e) {
return null;
}
}
/**
* 把json转成对应的类型。适合用于自定义数据类型,如ArrayList<Foo>等
* @param content json
* @param type 自定义类型的token。使用方法如下
* Type listType = new TypeToken<ArrayList<Foo>>(){}.getType();
* @param <T>
* @return 对应类型的对象
*/
public static <T>T fromJson(String content , Type type){
if(!StringUtil.isEmpty(content) && type != null){
try {
return gson.fromJson(content,type);
} catch (JsonSyntaxException e) {
e.printStackTrace();
}
}
return null;
}
public static Map<String, Object> toMap(Object obj) {
JsonElement element = gson.toJsonTree(obj);
return gson.fromJson(element, Map.class);
}
public static <T> T fromObject(Object obj, Class<T> clazz) {
JsonElement element = gson.toJsonTree(obj);
return gson.fromJson(element, clazz);
}
public static <T> T fromObject(Object obj, TypeToken<T> token) {
JsonElement element = gson.toJsonTree(obj);
return gson.fromJson(element, token.getType());
}
public static Map<String, Object> getMap(Map<String, Object> map, String key) {
if (map == null || key == null) {
return null;
}
Object value = map.get(key);
if (value instanceof Map) {
return (Map) value;
}
return null;
}
public static Long getLong(Map<String, Object> map, String key) {
if (map == null || key == null) {
return null;
}
Object value = map.get(key);
if (value == null) {
return null;
}
if (value instanceof Number) {
return ((Number) value).longValue();
}
try {
return Long.parseLong(value.toString());
} catch (NumberFormatException e) {
return null;
}
}
public static List<Long> getLongList(Map<String, Object> map, String key) {
if (map == null || key == null) {
return Collections.EMPTY_LIST;
}
Object value = map.get(key);
if (value == null) {
return Collections.EMPTY_LIST;
}
if (value instanceof List) {
List<Object> list = (List) value;
List<Long> longValues = new ArrayList<Long>();
for (Object i : list) {
if (i instanceof Number) {
longValues.add(((Number) i).longValue());
}
}
return longValues;
}
return Collections.EMPTY_LIST;
}
/**
* 从json中搜索,根据键的名字,返回值。
* @param json
* @param name json中的键名
* @return Object
*/
public static Object findObject(String json , String name){
Object object = null;
if(StringUtil.isEmpty(json) || StringUtil.isEmpty(name)){
return null;
}
try {
JSONObject jsonobject = new JSONObject(json);
if(!jsonobject.has(name)){
return null;
} else {
object = jsonobject.get(name);
}
} catch (JSONException e) {
e.printStackTrace();
}
return object;
}
}
其实数据比较复杂的时候可以考虑搭一个本地数据库的
判断程序是否是第一次运行 可以这样写 也是用的这个缓存
SharedPreferences setting = getSharedPreferences(SHARE_APP_TAG, 0);
Boolean user_first = setting.getBoolean("FIRST",true);
if(user_first){//第一次
setting.edit().putBoolean("FIRST", false).commit();
Toast.makeText(MainActivity.this, "第一次", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(MainActivity.this, "不是第一次", Toast.LENGTH_LONG).show();
}