Android 保存浏览记录 SharedPreTools

 SharedPreference 在Android 开发过程中,被经常运用,今天来写一下它的工具类

先介绍下 EdjApp ,属于自定义的Android Application 创建全局变量

 一、简单的数据存储方式,用来保存账号、密码等信息         

 二、用来保存多键值对象的id 等信息,如果我要获取一组自定义的存储对象,我可以先将它的id先保存下来

 三、对象类型的数据存储      一般用于自动登录、浏览历史等

 

下面是工具类,serviceinfo对象是网络获取的信息对象,我会存储并以查看时间的毫秒为对象的saveTime值

 

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.StreamCorruptedException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.commons.codec.binary.Base64;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;

import com.maq.api.ServiceInfo;
import com.maq.api.ServiceInfoComparator;
import com.maq.app.EdjApp;
public class SharedPreTools {
	
	//单键值存储----------------------------
	public static String readShare(String sharename,String key) {
		SharedPreferences user =  EdjApp.getInstance().getSharedPreferences(sharename,0);
		return user.getString(key, "");
	}

	public static void writeShare(String sharename,String key,String value ) {
		SharedPreferences user = EdjApp.getInstance().getSharedPreferences(sharename, 0);
		Editor editor = user.edit();
		editor.putString(key, value);
		editor.commit();
	}  
	
	public static void removeShare(String sharename,String key ) {
		SharedPreferences user = EdjApp.getInstance().getSharedPreferences(sharename, 0);
		Editor editor = user.edit();
		editor.remove(key);
		editor.commit();
	} 
	
	
	//多键值存储
	public static void writegroup(String sharename,String key,String value) {
		SharedPreferences call = EdjApp.getInstance().getSharedPreferences(sharename, 0);
		String group = call.getString(key, "");
		if (group.indexOf(value) < 0) {
			String newgroup = group + "," + key;
			Editor editor = call.edit();
			editor.putString(key, newgroup);
			editor.commit();
		}
	}

	public static void removegroup(String sharename,String key) {
		SharedPreferences call =  EdjApp.getInstance().getSharedPreferences(sharename, 0);
		String group = call.getString(key, "");
		String newgroup = group.replace("," + key, "");
		Editor editor = call.edit();
		editor.putString(key, newgroup);
		editor.commit();
	}
	
	
	
	/**
	 * 储存单条对象  serviceInfo
	 * @param per_name
	 * @param key
	 * @param vaule
	 */
	public static void saveServicePre(String per_name,String key,Object vaule){
		SharedPreferences loginUserInfo = EdjApp.getInstance().
				getSharedPreferences(per_name, Context.MODE_APPEND);
		Editor preEd = null;
		if(loginUserInfo != null){
			preEd = loginUserInfo.edit();
		}
		if(preEd != null){
			if(vaule != null){				
				ServiceInfo info1=(ServiceInfo)vaule;
				info1.setSaveTime(getTimeId());
				ByteArrayOutputStream baos = new ByteArrayOutputStream();
		        ObjectOutputStream oos=null;
		        try {
		         oos = new ObjectOutputStream(baos);
		         
		         oos.writeObject(info1);
		        } catch (IOException e) {
		         // TODO Auto-generated catch block
		         e.printStackTrace();
		        }
				String info = new String(Base64.encodeBase64(baos.toByteArray()));
				preEd.putString(key, info);
			}
			preEd.commit();
		}
	}
	
	/**
	 * 读取对象集合   serviceInfo
	 * @param per_name
	 * @param oblist
	 */
	public static <T> List<T> readAllServicePre(String per_name){
		  SharedPreferences loginUserInfo = EdjApp.getInstance().
				  getSharedPreferences(per_name, Context.MODE_APPEND);
		  Map<String, ?> maps = loginUserInfo.getAll();//取出所有数据
	      List<T> oblist = new ArrayList<T>();
		  Iterator it = maps.values().iterator();
		  while(it.hasNext()){
			 String base64Str = (String) it.next();
			 byte[] base64Bytes = Base64.decodeBase64(base64Str .getBytes());
			 ByteArrayInputStream bais = new ByteArrayInputStream(base64Bytes);
			 ObjectInputStream ois;
			 try {
			   ois = new ObjectInputStream(bais);
			   T tempobj = (T) ois.readObject();
			   oblist.add(tempobj);
//			   LoginUser loginUser = (LoginUser)tempobj;
			 } catch (StreamCorruptedException e) {
			   // TODO Auto-generated catch block
			   e.printStackTrace();
			 } catch (IOException e) {
			   // TODO Auto-generated catch block
			   e.printStackTrace();
			 } catch (ClassNotFoundException e) {
			   // TODO Auto-generated catch block
			   e.printStackTrace();
			 }
		  }
		    ArrayList<ServiceInfo>tempserviceInfo = new ArrayList<ServiceInfo>();
		    tempserviceInfo.addAll((Collection<? extends ServiceInfo>) oblist);
		    
			Comparator<ServiceInfo> ascComparator = new ServiceInfoComparator(); 
			Collections.sort(tempserviceInfo, ascComparator);
			oblist.clear();
			oblist.addAll((Collection<? extends T>) tempserviceInfo);
			
		  return oblist;
	}
	/**
	 * 删除单条对象数据
	 * @param per_name
	 * @param key
	 */
	public static void removeObjectPre(String per_name,String key){
		SharedPreferences loginUserInfo = EdjApp.getInstance().
				getSharedPreferences(per_name, Context.MODE_APPEND);
		Editor preEd = null;
		if(loginUserInfo != null){
			preEd = loginUserInfo.edit();
		}
		preEd.remove(key);
		preEd.commit();
	}
	
	//当前时间为id
	public static long getTimeId() {
		Date data = new Date();
		long time=data.getTime();
		return time;
	}
	
	//---------------------------
	/**
	 * 储存单条对象 
	 * @param per_name
	 * @param key
	 * @param vaule
	 */
	public static void saveObjectPre(String per_name,String key,Object vaule){
		SharedPreferences loginUserInfo = EdjApp.getInstance().
				getSharedPreferences(per_name, Context.MODE_APPEND);
		Editor preEd = null;
		if(loginUserInfo != null){
			preEd = loginUserInfo.edit();
		}
		if(preEd != null){
			if(vaule != null){
				ByteArrayOutputStream baos = new ByteArrayOutputStream();
		        ObjectOutputStream oos=null;
		        try {
		         oos = new ObjectOutputStream(baos);
		         oos.writeObject(vaule);
		        } catch (IOException e) {
		         // TODO Auto-generated catch block
		         e.printStackTrace();
		        }
				String info = new String(Base64.encodeBase64(baos.toByteArray()));
				preEd.putString(key, info);
			}
			preEd.commit();
		}
	}
	
	/**
	 * 读取对象集合 
	 * @param per_name
	 * @param oblist
	 */
	public static <T> List<T> readAllObjectPre(String per_name){
		  SharedPreferences loginUserInfo = EdjApp.getInstance().
				  getSharedPreferences(per_name, Context.MODE_APPEND);
		  Map<String, ?> maps = loginUserInfo.getAll();//取出所有数据
	      List<T> oblist = new ArrayList<T>();
		  Iterator it = maps.values().iterator();
		  while(it.hasNext()){
			 String base64Str = (String) it.next();
			 byte[] base64Bytes = Base64.decodeBase64(base64Str .getBytes());
			 ByteArrayInputStream bais = new ByteArrayInputStream(base64Bytes);
			 ObjectInputStream ois;
			 try {
			   ois = new ObjectInputStream(bais);
			   T tempobj = (T) ois.readObject();
			   oblist.add(tempobj);
			 } catch (StreamCorruptedException e) {
			   // TODO Auto-generated catch block
			   e.printStackTrace();
			 } catch (IOException e) {
			   // TODO Auto-generated catch block
			   e.printStackTrace();
			 } catch (ClassNotFoundException e) {
			   // TODO Auto-generated catch block
			   e.printStackTrace();
			 }
		  }
		  return oblist;
	}
}


 

对象的排序,需要 根据设置的时间来算

 

import java.util.Comparator;

public class ServiceInfoComparator implements Comparator<ServiceInfo> {

	@Override
	public int compare(ServiceInfo object1, ServiceInfo object2) {
		// TODO Auto-generated method stub

		return Double.compare(object2.getSaveTime(), object1.getSaveTime());
	}

}

 

 

这样的存取就能获得查看的历史记录,同时可以延伸到通话记录,收藏等

 

个人原创,转载请注明出处:http://blog.csdn.net/ma969070578/article/details/8995737 

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值