文档章节

okhttp 如何设置 reponse cache 缓存

moz1q1
 moz1q1
发布于 2016/05/01 11:30
字数 877
阅读 208
收藏 3

虽然okttp自动的缓存一般,但是考虑到信息安全问题,如果信息比较敏感的话,最好自己写在数据库,自己做缓存,

我在tigerokttp上基础修改一些东西,实现我自己的缓存,大家最好别做伸手党,多看看别人的源码,tigerokhttp的设计不一定适合每个人的业务需求,我结合mvp和mvvm做了一个demo

package com.moziqi.testmvvm;

/**
 * Created by moziqi on 16-5-1.
 */
public interface IMainView {
    public void doSuccess(String result);

    public void doFailure(String error);
}

package com.moziqi.testmvvm;

/**
 * Created by moziqi on 16-5-1.
 */
public interface IPresenter extends Runnable {

    public void cancel();
}

package com.moziqi.testmvvm;

import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

import com.moziqi.testmvvm.databinding.ActivityMainBinding;

import cn.ittiger.net.http.TigerOkHttp;

public class MainActivity extends FragmentActivity implements IMainView {

    private MainPresenter mainPresenter = new MainPresenter(this);
    private ActivityMainBinding activityMainBinding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_main);
        activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        mainPresenter.testGet();
    }

    @Override
    public void doSuccess(String result) {
        activityMainBinding.setUser(new UserBean(1, result));
    }

    @Override
    public void doFailure(String error) {
        activityMainBinding.setUser(new UserBean(1, error));
    }

    @Override
    protected void onDestroy() {
        mainPresenter.cancel();
        super.onDestroy();
    }
}

package com.moziqi.testmvvm;

import cn.ittiger.net.common.RequestCallback;
import cn.ittiger.net.http.TigerOkHttp;
import cn.ittiger.net.http.exeception.TigerHttpException;
import cn.ittiger.net.http.request.TigerJsonRequest;

/**
 * MVP的深入learn 其他人的框架https://github.com/moziqi/Beam
 * Created by moziqi on 16-5-1.
 */
public class MainPresenter implements IPresenter {

    private IMainView iMainView;

    private TigerJsonRequest<String> request;

    private Thread netThread;

    public MainPresenter(IMainView iMainView) {
        this.iMainView = iMainView;
        netThread = new Thread(this);
    }

    public void testGet() {
        request = new TigerJsonRequest<>("https://www.baidu.com");
        //request.addHeaders(MApplication.getInstance().getDefaultHeaders());
        request.setRequestCallback(new RequestCallback<String>() {
            @Override
            public void onSuccess(String result) {
                iMainView.doSuccess(result);
            }

            @Override
            public void onFailure(TigerHttpException e) {
                iMainView.doFailure(e.getMessage());
            }
        });
        netThread.start();
    }

    @Override
    public void run() {
        //http://blog.csdn.net/aminfo/article/details/7903112
        TigerOkHttp.getAsync(request);
    }

    @Override
    public void cancel() {
        TigerOkHttp.cancel(request.getTag());
        request = null;
        netThread = null;
    }
}

package com.moziqi.testmvvm;

import android.app.Application;
import android.content.Context;
import android.telephony.TelephonyManager;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

import cn.ittiger.net.http.TigerOkHttp;
import cn.ittiger.net.http.config.TigerHttpConfig;

/**
 * Created by moziqi on 16-4-30.
 */
public class MApplication extends Application {

    private static MApplication mApplication;

    @Override
    public void onCreate() {
        super.onCreate();
        mApplication = this;
        //初始化
        TigerOkHttp.init(new TigerHttpConfig(getApplicationContext()));
    }


    public static MApplication getInstance() {
        return mApplication;
    }

    /**
     * cache-control可以在请求的过程中设置缓存策略,会自动添加对于的header头
     *
     * @return
     */
    public Map<String, String> getDefaultHeaders() {
        SimpleDateFormat sFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Calendar calendar = Calendar.getInstance();
        Map<String, String> headers = new HashMap<>();
        headers.put("User-Agent", getPhoneInfo());
        headers.put("Connection", "close");
        headers.put("Date", sFormat.format(calendar.getTime()));
        return null;
    }

    /**
     * 获取文件上传请求头
     *
     * @return
     */
    public Map<String, String> getUploadFileHeaders() {
        SimpleDateFormat sFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Calendar calendar = Calendar.getInstance();
        Map<String, String> headers = new HashMap<>();
        headers.put("User-Agent", getPhoneInfo());
        headers.put("Connection", "keep-alive");
        headers.put("Content-Type", "multipart/form-data;boundary=" + UUID.randomUUID().toString());
        headers.put("Date", sFormat.format(calendar.getTime()));
        return null;
    }


    /**
     * 根据自身开发需求,公司需求再加修改
     *
     * @return
     */
    public String getPhoneInfo() {
        StringBuilder phoneInfo = new StringBuilder();
        phoneInfo.append("Product: " + android.os.Build.PRODUCT + System.getProperty("line.separator"));
        phoneInfo.append("CPU_ABI: " + android.os.Build.CPU_ABI + System.getProperty("line.separator"));
        phoneInfo.append("TAGS: " + android.os.Build.TAGS + System.getProperty("line.separator"));
        phoneInfo.append("VERSION_CODES.BASE: " + android.os.Build.VERSION_CODES.BASE + System.getProperty("line.separator"));
        phoneInfo.append("MODEL: " + android.os.Build.MODEL + System.getProperty("line.separator"));
        phoneInfo.append("SDK: " + android.os.Build.VERSION.SDK + System.getProperty("line.separator"));
        phoneInfo.append("VERSION.RELEASE: " + android.os.Build.VERSION.RELEASE + System.getProperty("line.separator"));
        phoneInfo.append("DEVICE: " + android.os.Build.DEVICE + System.getProperty("line.separator"));
        phoneInfo.append("DISPLAY: " + android.os.Build.DISPLAY + System.getProperty("line.separator"));
        phoneInfo.append("BRAND: " + android.os.Build.BRAND + System.getProperty("line.separator"));
        phoneInfo.append("BOARD: " + android.os.Build.BOARD + System.getProperty("line.separator"));
        phoneInfo.append("FINGERPRINT: " + android.os.Build.FINGERPRINT + System.getProperty("line.separator"));
        phoneInfo.append("ID: " + android.os.Build.ID + System.getProperty("line.separator"));
        phoneInfo.append("MANUFACTURER: " + android.os.Build.MANUFACTURER + System.getProperty("line.separator"));
        phoneInfo.append("USER: " + android.os.Build.USER + System.getProperty("line.separator"));
        TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        phoneInfo.append("DeviceId(IMEI) = " + tm.getDeviceId() + System.getProperty("line.separator"));
        phoneInfo.append("DeviceSoftwareVersion = " + tm.getDeviceSoftwareVersion() + System.getProperty("line.separator"));
        phoneInfo.append("Line1Number = " + tm.getLine1Number() + System.getProperty("line.separator"));
        phoneInfo.append("NetworkCountryIso = " + tm.getNetworkCountryIso() + System.getProperty("line.separator"));
        phoneInfo.append("NetworkOperator = " + tm.getNetworkOperator() + System.getProperty("line.separator"));
        phoneInfo.append("NetworkOperatorName = " + tm.getNetworkOperatorName() + System.getProperty("line.separator"));
        phoneInfo.append("NetworkType = " + tm.getNetworkType() + System.getProperty("line.separator"));
        phoneInfo.append("PhoneType = " + tm.getPhoneType() + System.getProperty("line.separator"));
        phoneInfo.append("SimCountryIso = " + tm.getSimCountryIso() + System.getProperty("line.separator"));
        phoneInfo.append("SimOperator = " + tm.getSimOperator() + System.getProperty("line.separator"));
        phoneInfo.append("SimOperatorName = " + tm.getSimOperatorName() + System.getProperty("line.separator"));
        phoneInfo.append("SimSerialNumber = " + tm.getSimSerialNumber() + System.getProperty("line.separator"));
        phoneInfo.append("SimState = " + tm.getSimState() + System.getProperty("line.separator"));
        phoneInfo.append("SubscriberId(IMSI) = " + tm.getSubscriberId() + System.getProperty("line.separator"));
        phoneInfo.append("VoiceMailNumber = " + tm.getVoiceMailNumber() + System.getProperty("line.separator"));
        return phoneInfo.toString();
    }
}

package com.moziqi.testmvvm;

import android.os.Parcel;
import android.os.Parcelable;

/**
 * Created by moziqi on 16-4-30.
 */
public class UserBean implements Parcelable{

    private int id;
    private String name;


    public UserBean() {
    }

    public UserBean(int id, String name) {
        this.id = id;
        this.name = name;
    }

    protected UserBean(Parcel in) {
        id = in.readInt();
        name = in.readString();
    }

    public static final Creator<UserBean> CREATOR = new Creator<UserBean>() {
        @Override
        public UserBean createFromParcel(Parcel in) {
            return new UserBean(in);
        }

        @Override
        public UserBean[] newArray(int size) {
            return new UserBean[size];
        }
    };

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeInt(id);
        parcel.writeString(name);
    }
}

我是基于android studio2.0编写的,具体代码在https://github.com/moziqi/TestMvvm,大家可以比较下,我改动了tiggerokhttp什么代码,代码并不是很多。

谢谢下面的博主提供思路给我

http://blog.csdn.net/huyongl1989/article/details/50467977

http://www.jianshu.com/p/aad5aacd79bf

https://github.com/duzechao/OKHttpUtils




© 著作权归作者所有

moz1q1
粉丝 55
博文 351
码字总数 117569
作品 0
东莞
程序员
私信 提问
OkHttp3源码解析内部缓存

OkHttp3系列文章 OkHttp3 源码解析执行流程 OkHttp3 源码解析 连接池的复用 如果有了解过OkHttp的执行流程,可以知道,在拦截器链中有一个缓存拦截器CacheInterceptor,里面决定了是由缓存中...

Gillben
2018/05/22
0
0
Android Okhttp缓存:精细化每一个Request的CacheControl缓存控制策略(二)

Android Okhttp缓存:精细化每一个Request的CacheControl缓存控制策略(二) 之前我写的附录文章1,只是简单的使用缺省的方法实现Okhttp的缓存。现在使用CacheControl,精细化到每一个Reque...

开开心心过
2017/10/24
0
0
Android技能树 — 网络小结之 OkHttp超超超超超超超详细解析

前言: 本文也做了一次标题党,哈哈,其实写的还是很水,各位原谅我O(∩_∩)O。 介于自己的网络方面知识烂的一塌糊涂,所以准备写相关网络的文章,但是考虑全部写在一篇太长了,所以分开写,...

青蛙要fly
2018/11/13
0
0
OkHttp 文档翻译之 Calls

Calls Http client 的工作是接收请求和生成响应。这个在原理上很简答的问题,在实现时变得很棘手。 Requests 每个 Http request 包含一个 URL,一个方法(例如 :GET or Post),和 Headers ...

黑泥卡
2018/08/21
0
0
Android Okhttp缓存:Cache,创建OkHttpClient实现(一)

Android Okhttp缓存Cache,创建OkHttpClient实现 Android Okhttp使用缓存通过Cache实现。在创建OkHttpClient实现。构造Cache需要传递一个缓存文件目录已经缓存的大小尺寸。 下面演示一个简单...

开开心心过
2017/10/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

哪些情况下适合使用云服务器?

我们一直在说云服务器价格适中,具备弹性扩展机制,适合部署中小规模的网站或应用。那么云服务器到底适用于哪些情况呢?如果您需要经常原始计算能力,那么使用独立服务器就能满足需求,因为他...

云漫网络Ruan
50分钟前
3
0
Kafka 2.3 Producer (0.9以后版本适用)

kafka0.9版本以后用java重新编写了producer,废除了原来scala编写的版本。 这里直接使用最新2.3版本,0.9以后的版本都适用。 注意引用的包为:org.apache.kafka.clients.producer import ja...

实时计算
58分钟前
3
0
Java 中的 String 有没有长度限制

转载: https://juejin.im/post/5d53653f5188257315539f9a String是Java中很重要的一个数据类型,除了基本数据类型以外,String是被使用的最广泛的了,但是,关于String,其实还是有很多东西...

低至一折起
今天
14
0
OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
11
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部