智慧北京:网络访问数据缓存

由于每次打开应用之前,我们发现可以加载上次缓存的内容,所以我们这次来设置如何进行网络访问数据的缓存。
实现目的:在第一次打开该应用时进行数据缓存,在第二次打开该应用时,如果发现存在缓存的数据,即加载这部分的数据,再过2分钟开始,刷新网络的数据。
这里写图片描述
这里写图片描述
1、在 CacheUtils设置缓存string、long等数据。
CacheUtils.java

package huaxa.it.zhihuidemo.utils;

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

/**
 * @项目名: ZhiHuiDemo
 * @包名: huaxa.it.zhihuidemoUtils
 * @类名: CacheUtils
 * @创建者: 黄夏莲
 * @创建时间: 2016年10月3日 ,下午6:09:45
 * 
 * @描述:跳转页面
 * 
 */
public class CacheUtils
{
    private final static String         sharedPreferencesName   = "zhbj";
    private static SharedPreferences    mpreferences;                       // 静态的,从内存取(只需取1次),比读文件快(每次都要读取)

    private static SharedPreferences getsp(Context context)
    {
        if (mpreferences == null)
        {
            mpreferences = context.getSharedPreferences(sharedPreferencesName,
                    Context.MODE_PRIVATE);
        }
        return mpreferences;

    }

    /**
     * 通过sp获得boolean类型的数据,没有默认为false
     * 
     * @param context
     *            :上下文
     * @param key
     *            :存储的key
     * @return
     */
    public static boolean getBoolean(Context context, String key)
    {
        // TODO Auto-generated method stub
        // SharedPreferences mpreferences = context.getSharedPreferences(
        // sharedPreferencesName, Context.MODE_PRIVATE);

        mpreferences = getsp(context);
        return mpreferences.getBoolean(key, false);// 第二个参数为缺省值,如果preference中不存在该key,将返回缺省值
    }

    /**
     * 通过sp获得boolean类型的数据
     * 
     * @param context
     *            :上下文
     * @param key
     *            :存储的key
     * @param defValue
     *            :默认值
     * @return
     */
    public static boolean getBoolean(Context context, String key,
            boolean defValue)
    {
        // TODO Auto-generated method stub
        // SharedPreferences mpreferences = context.getSharedPreferences(
        // sharedPreferencesName, Context.MODE_PRIVATE);
        mpreferences = getsp(context);
        return mpreferences.getBoolean(key, defValue);
    }

    /**
     * 
     * 设置Boolean的缓存数据
     * 
     * @param context
     *            :上下文
     * @param key
     *            :缓存对应的key
     * @param value
     *            :缓存对应的值
     * @return
     */
    public static void setBoolean(Context context, String key, boolean value)
    {
        // SharedPreferences mpreferences = context.getSharedPreferences(
        // sharedPreferencesName, Context.MODE_PRIVATE);
        mpreferences = getsp(context);
        Editor editor = mpreferences.edit();// 获取编辑器
        editor.putBoolean(key, value);
        editor.commit();

    }

    /**
     * 通过sp获得String类型的数据,没有默认为null
     * 
     * @param context
     *            :上下文
     * @param key
     *            :存储的key
     * @return
     */
    public static String getString(Context context, String key)
    {
        // TODO Auto-generated method stub
        // SharedPreferences mpreferences = context.getSharedPreferences(
        // sharedPreferencesName, Context.MODE_PRIVATE);

        mpreferences = getsp(context);
        return mpreferences.getString(key, null);// 第二个参数为缺省值,如果preference中不存在该key,将返回缺省值
    }

    /**
     * 通过sp获得String类型的数据
     * 
     * @param context
     *            :上下文
     * @param key
     *            :存储的key
     * @param defValue
     *            :默认值
     * @return
     */
    public static String getString(Context context, String key, String defValue)
    {
        // TODO Auto-generated method stub
        // SharedPreferences mpreferences = context.getSharedPreferences(
        // sharedPreferencesName, Context.MODE_PRIVATE);
        mpreferences = getsp(context);
        return mpreferences.getString(key, defValue);
    }

    /**
     * 
     * 设置String的缓存数据
     * 
     * @param context
     *            :上下文
     * @param key
     *            :缓存对应的key
     * @param value
     *            :缓存对应的值
     * @return
     */
    public static void setString(Context context, String key, String value)
    {
        // SharedPreferences mpreferences = context.getSharedPreferences(
        // sharedPreferencesName, Context.MODE_PRIVATE);
        mpreferences = getsp(context);
        Editor editor = mpreferences.edit();// 获取编辑器
        editor.putString(key, value);
        editor.commit();

    }

    /**
     * 通过sp获得long类型的数据,没有默认为-1
     * 
     * @param context
     *            :上下文
     * @param key
     *            :存储的key
     * @return
     */
    public static long getLong(Context context, String key)
    {
        // TODO Auto-generated method stub
        // SharedPreferences mpreferences = context.getSharedPreferences(
        // sharedPreferencesName, Context.MODE_PRIVATE);

        mpreferences = getsp(context);
        return mpreferences.getLong(key, -1);// 第二个参数为缺省值,如果preference中不存在该key,将返回缺省值
    }

    /**
     * 通过sp获得long类型的数据
     * 
     * @param context
     *            :上下文
     * @param key
     *            :存储的key
     * @param defValue
     *            :默认值
     * @return
     */
    public static long getLong(Context context, String key, long defValue)
    {
        // TODO Auto-generated method stub
        // SharedPreferences mpreferences = context.getSharedPreferences(
        // sharedPreferencesName, Context.MODE_PRIVATE);
        mpreferences = getsp(context);
        return mpreferences.getLong(key, defValue);
    }

    /**
     * 
     * 设置long的缓存数据
     * 
     * @param context
     *            :上下文
     * @param key
     *            :缓存对应的key
     * @param value
     *            :缓存对应的值
     * @return
     */
    public static void setLong(Context context, String key, long value)
    {
        // SharedPreferences mpreferences = context.getSharedPreferences(
        // sharedPreferencesName, Context.MODE_PRIVATE);
        mpreferences = getsp(context);
        Editor editor = mpreferences.edit();// 获取编辑器
        editor.putLong(key, value);
        editor.commit();

    }
}

NewsCenterTabController.java

public void initData()
    {
        ……
        final String url = Constans.NewsCenter_URI;

        // 到缓存中取数据
        String json = CacheUtils.getString(mContext, url);
        long date = CacheUtils.getLong(mContext, url +"_date"); 
        // 判断json是否为空
        if (!TextUtils.isEmpty(json))
        {
            //有缓存数据
            //从缓存中取出数据
            Log.i(TAG, "读取到缓存");
            ProcessData(json);
            //过后2分钟开始进行网络加载数据
            if((System.currentTimeMillis() - date) < DELAY_TIME ){
                Log.i(TAG, "使用缓存数据,不使用网络");
                return;
            }
        }

        ……
        util.send(HttpMethod.GET, url, new RequestCallBack<String>()
        {
            @Override
            public void onSuccess(ResponseInfo<String> responseInfo)
            {
                // 响应状态码,Success指的是访问服务器成功,返回状态码与服务器有关而不一定是200,返回状态码不确定。
                // 这个状态码要和提供的状态码匹配,访问接口才会成功。
                // int statusCode = responseInfo.statusCode;
                // 访问接口成功(此处先默认是匹配的)
                String result = responseInfo.result;

                Log.i(TAG, "设置缓存数据");
                //设置缓存数据和时间
                CacheUtils.setString(mContext, url, result);
                CacheUtils.setLong(mContext, url +"_date", System.currentTimeMillis());

                Log.i(TAG, "访问接口成功" + result);
                // 数据的处理
                ProcessData(result);
            }

        ……
        });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值