搞了一天,用SharedPreference 实现网络请求的JSON数据的本地存储

本文介绍了一个名为SPTool的工具类,该类利用SharedPreferences实现HTTP请求结果的本地缓存功能,包括检查本地是否存在未过期的JSON结果,并提供读写缓存的方法。通过设置过期时间和特定的数据标识,确保了缓存的有效性和时效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.lonshin.chexiaodi.http;

import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.Timer;
import java.util.TimerTask;
import java.util.TreeSet;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;

import com.krislq.sliding.MyApplication;

import android.content.Context;
import android.content.ContextWrapper;
import android.content.SharedPreferences;
import android.util.Log;
/**
* to check if the local JSONResult exist
*
* and do the write and read
* @author linsen
*
*/


public class SPTool {
SharedPreferences sp;
SharedPreferences.Editor editor;

private SPTool(){
sp = MyApplication.getInstance().getSharedPreferences("Result", Context.MODE_WORLD_READABLE);
editor = sp.edit();


}

private static SPTool instance = new SPTool(){};

public static SPTool getInstance(){
return instance;
}
/**
* 判断是否有本地json 而且是没过期的
*
* @return
*/
public boolean hasSDResult(List<NameValuePair> params){
// Log.d("httplocal-in Sdjr",String.valueOf(sp.contains(params.toString())));
long oldT = 0;
long newT = 0;

//取得保存的String当时的时间oldT
if(sp.contains(params.toString())){
String s = sp.getString(params.toString(), null);
if(s.contains("#")){
String[] str = s.split("#");
oldT = Long.parseLong(str[0]);
newT = new Date().getTime();
}
}

//设置过期时间为1小时---若测试用则设为3秒
if(((newT-oldT)<5000)&&((newT-oldT)>0)){
return true;
}else{
return false;
}


}

/**
* 访问结果访问到本地
* @param params
* @param result
*/
public void saveToSD(List<NameValuePair> params , String result){

//在保存的String中增加一个time及符号"#"
String time = String.valueOf(new Date().getTime());
String result01 = time+"#"+result;
editor.putString(params.toString(), result01);
editor.commit();
Log.d("httplocal-in Sdjr","saveToSD"+params.toString());
}

/**
* 获取本地保存的访问结果
* @param params
* @return
*/
public String getSDResult(List<NameValuePair> params){
Log.d("httplocal" , "getSDResult");
String s = sp.getString(params.toString(), null);

//取得数据时,去掉附加的time信息
if(s.contains("#")){
String[] str = s.split("#");

return str[1];
}else{
return s;
}


}


}

转载于:https://www.cnblogs.com/linxiaojiang/archive/2013/05/04/3059729.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值