/*
* @Company 浙 江 鸿 程 计 算 机 系 统 有 限 公 司
* @URL http://www.zjhcsoft.com
* @Address 杭州滨江区伟业路1号
* @Email jinjr@zjhcsoft.com
* @author jinjr
* @data 2016-1-5 下午2:58:45
*/
package com.android.hcframe.internalservice.sign; import android.content.Context;
import android.text.TextUtils; import com.android.hcframe.CacheManager;
import com.android.hcframe.HcApplication;
import com.android.hcframe.HcLog;
import com.android.hcframe.HcUtil;
import com.android.hcframe.TemporaryCache;
import com.android.hcframe.http.AbstractHttpRequest;
import com.android.hcframe.http.AbstractHttpResponse;
import com.android.hcframe.http.HcHttpRequest;
import com.android.hcframe.http.IHttpResponse;
import com.android.hcframe.http.RequestCategory;
import com.android.hcframe.http.ResponseCategory;
import com.android.hcframe.sql.SettingHelper; import org.json.JSONObject; import java.util.Observable; public class SignCache extends Observable implements IHttpResponse, TemporaryCache { private static final String TAG = "SignCache"; private final static SignCache CACHE = new SignCache(); private SignCofig mConfig; private SignCache() {
CacheManager.getInstance().addCache(this);
mConfig = new SignCofig();
} public static SignCache getInstance() {
return CACHE;
} @Override
public void clearCache(boolean exit) {
if (exit) mConfig = null;
else {
clearCache();
} } private static class SignCofig {
/** 纬度 */
String mLatitude;
/**
* 经度
*/
String mLongitude;
/**
* 标准上班时间
*/
String mWorkInTime;
/**
* 标准下班时间
*/
String mWorkOutTime;
/**
* 当天签到时间
*/
String mSignInTime;
/**
* 当天签出时间
*/
String mSignOutTime;
/**
* 有效距离
*/
int mDistance;
} public int getMaxDistance() {
return mConfig.mDistance;
} public void setMaxDistance(int maxDistance) {
mConfig.mDistance = maxDistance;
} public String getLatitude() {
return mConfig.mLatitude;
} public void setLatitude(String latitude) {
mConfig.mLatitude = latitude;
} public String getLongitude() {
return mConfig.mLongitude;
} public void setLongitude(String longitude) {
mConfig.mLongitude = longitude;
} public String getWorkInTime() {
return mConfig.mWorkInTime;
} public void setWorkInTime(String workInTime) {
mConfig.mWorkInTime = workInTime;
} public String getWorkOutTime() {
return mConfig.mWorkOutTime;
} public void setWorkOutTime(String workOutTime) {
mConfig.mWorkOutTime = workOutTime;
} public String getSignInTime() {
return mConfig.mSignInTime;
} public void setSignInTime(String signInTime) {
mConfig.mSignInTime = signInTime;
} public String getSignOutTime() {
return mConfig.mSignOutTime;
} public void setSignOutTime(String signOutTime) {
mConfig.mSignOutTime = signOutTime;
} @Override
public void notify(Object data, RequestCategory request,
ResponseCategory category) {
// TODO Auto-generated method stub
switch (request) {
case SIGNADDR:
switch (category) {
case SUCCESS:
if (data != null && data instanceof String) {
parseSignConfig((String) data);
SettingHelper.setSignInfo(HcApplication.getContext(), (String) data);
}
break; default:
break;
}
break; default:
break;
}
} @Override
public void notifyRequestMd5Url(RequestCategory request, String md5Url) {
// TODO Auto-generated method stub }
/**
* 判断签到的一些配置信息是否存在;
* 此方法不是很严谨
* @author jrjin
* @time 2016-1-5 下午3:16:08
* @return
*/
public boolean configExist(Context context) {
if (TextUtils.isEmpty(mConfig.mLatitude)) {
String data = SettingHelper.getSignInfo(context);
   if (!TextUtils.isEmpty(data))
parseSignConfig(data);
else { // 去服务器获取数据
if (HcUtil.isNetWorkAvailable(context)) {
HcHttpRequest.getRequest().sendSignAddrCommand(this);
}
// }
}
return !TextUtils.isEmpty(mConfig.mLatitude);
} private void parseSignConfig(String data) {
try {
JSONObject body = new JSONObject(data);
if (HcUtil.hasValue(body, "latitude")) {
mConfig.mLatitude = body.getString("latitude");
}
if (HcUtil.hasValue(body, "longitude")) {
mConfig.mLongitude = body.getString("longitude");
}
if (HcUtil.hasValue(body, "signInTime")) {
mConfig.mSignInTime = body.getString("signInTime"); }
if (HcUtil.hasValue(body, "signOutTime")) {
mConfig.mSignOutTime = body.getString("signOutTime"); }
if (HcUtil.hasValue(body, "workInTime")) {
mConfig.mWorkInTime = body.getString("workInTime"); }
if (HcUtil.hasValue(body, "workOutTime")) {
mConfig.mWorkOutTime = body.getString("workOutTime"); }
if (HcUtil.hasValue(body, "maxDistance")) {
mConfig.mDistance = body.getInt("maxDistance");
HcLog.D(TAG + " #parseSignConfig mDistance = " +mConfig.mDistance);
}
} catch (Exception e) {
// TODO: handle exception
HcLog.D(TAG + " #parseSignConfig e = "+e);
}
} /**
* 清除缓存
* @author jrjin
* @time 2016-1-28 下午1:45:10
*/
public void clearCache() {
mConfig = new SignCofig();
} }
 public void sendSignAddrCommand(IHttpResponse response) {
Map<String, String> httpparams = new HashMap<String, String>();
httpparams.put("account",
URLEncode(SettingHelper.getAccount(HcApplication.getContext())));
String stuxx = "";
try {
stuxx = HcUtil.getGetParams(HcUtil.mapToList(httpparams));
} catch (Exception e) {
e.printStackTrace();
} String url = HcUtil.getScheme() + BASE_URL + SignAddr.SignAddrUrl
+ stuxx;
// HcUtil.getScheme() + BASE_URL + SignItemInfo.URL + stuxx;
HcLog.D("HcHttpRequest sendSignAddrCommand url = " + url);
String key = hasInTask(url);
if (key == null)
return;
HttpGet get = new HttpGet(url);
SignAddr signAddr = new SignAddr(get);
signAddr.mCategory = RequestCategory.SIGNADDR;
signAddr.mResponse = response;
addTask(signAddr);
response.notifyRequestMd5Url(signAddr.mCategory, key);
mClient.execute(signAddr);
}
 public class SignAddr extends AbstractHttp {
private static final String TAG = HcHttpRequest.TAG + "#SignAddr"; private static final String SignAddrUrl = "getsignaddress"; public SignAddr(HttpUriRequest request) {
super(mClient, request, mHandler);
} @Override
public void parseJson(String data) {
cancelTask(this);
HcLog.D(TAG + " parseJson data = " + data);
try {
JSONObject object = new JSONObject(data);
if (object != null) {
int status = object.getInt(STATUS);
if (status == REQUEST_SUCCESS) {
postView(object.getJSONObject(BODY).toString(), mResponse, ResponseCategory.SUCCESS,
mCategory);
} else {
toastError(status, object, this);
}
}
} catch (Exception e) {
HcLog.D(TAG + " error = " + e);
postView(mCategory, mResponse, ResponseCategory.DATA_ERROR,
mCategory);
}
} @Override
public String getRequestMethod() {
// TODO Auto-generated method stub
return "getsignaddress";
}
}

Android 有缓存功能的请求封装接口的更多相关文章

  1. Android清除缓存功能来实现

    我们都知道在Android的设置->应用程序中能够查看应用程序的相关信息,当中有一个功能是清除缓存. 如图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZ ...

  2. android 清除缓存功能

    本应用数据清除管理器 DataCleanManager.java   是从网上摘的 忘了 名字了 对不住了 载入一个webview   产生缓存  众所周知的webview是产生缓存的主要原因之中的一 ...

  3. Android,适合Restful网络请求封装

    借助volley.Gson类库. 优点 网络请求集中处理,返回值直接为预期的对象,不需要手动反序列,提高效率,使用时建立好model类即可. 使用效果 DataProess.Request(true, ...

  4. android:Android 6.0权限控制代码封装

    新建的Activity类可以继承这个Activity,这个类封装了关于新版的权限处理相关的代码 使用方法: package com.glsite.phone; import android.conte ...

  5. Flutter 实际开发常用工具类(全局提示,请求封装,token缓存,验证码倒计时、常用窗帘动画及布局)

    介绍: 一星期从入门到实际开发经验分享及总结           代码传送门github Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面.未来App开发 ...

  6. Postman - 功能强大的 API 接口请求调试和管理工具

    Postman 是一款功能强大的的 Chrome 应用,可以便捷的调试接口.前端开发人员在开发或者调试 Web 程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的 Fi ...

  7. 基于AFN封装的带缓存的网络请求

    给大家分享一个基于AFN封装的网络请求 git: https://github.com/zhouxihi/NVNetworking #带缓存机制的网络请求 各类请求有分带缓存 , 不带缓存, 可自定义 ...

  8. Android记录20-获取缓存大小和清除缓存功能

    Android开发记录20-获取缓存大小和清除缓存功能 转载请注明:IT_xiao小巫 博客地址:http://blog.csdn.net/wwj_748 前言 本篇博客要给大家分享的如何获取应用缓存 ...

  9. angular cli http请求封装+拦截器配置+ 接口配置文件

    内容:接口配置文件.http请求封装 .拦截器验证登录 1.接口配置文件 app.api.ts import { Component, OnInit } from '@angular/core'; / ...

随机推荐

  1. Ruby中的Symbol与字符串

    刚开始学Ruby,一下子搞不清其中的Symbol(变量需要加:)和字符串有什么区别,为这么要为语言设计这么一个东西.让我很迷惑. 首先,字符串对象,是不同的.比如"String" ...

  2. Android Animations简介

    一 .Animations简介 Animations提供了一系列的动画效果,这些效果可以应用于绝大多数的控件: 二.Animations的分类 第一类:TweenedAnimations,该类Anim ...

  3. C#实现目录复制

     摘自:http://www.cnblogs.com/zxjay/archive/2008/10/29/1322517.html FCL提供了文件移动.文件复制.目录移动的方法,但没提供目录复制的 ...

  4. struct2(四)编写Struct2 的Action

    简介: 1.映射一个Action到一个类上面 2.把结果返回到view展示 3.编写Action对应的控制逻辑   1. Action Mapping <action name="he ...

  5. [置顶] API相关工作过往的总结之Sandcastle简要使用介绍

    Sandcastle介绍 在微软推出Sandcastle之前,人们倾向于选择开源的NDoc(.NET代码文档生成器).NDo可以将 C#.NET 编译生成的程序集和对应的 /doc XML文档,自动转 ...

  6. 前端开发利器—FIDDLER 转

    http://www.cnblogs.com/yuzhongwusan/archive/2012/07/20/2601306.html 前端开发利器—FIDDLER 1.Fiddler相对其他调试工具 ...

  7. jQuery插件开发 格式与解析2

    最近忙里偷闲玩一下js插件,经过自身的练习,感觉js插件还是挺好玩的.特此作如下笔记,给自己留个印象.例子形如: (1)类插件:classTool.js Code: (function($,expor ...

  8. 初学者学Java设计模式(一)------单例设计模式

    单例设计模式 单例设计模式是指一个类只会生成一个对象,优点是他可以确保所有对象都访问唯一实例. 具体实现代码如下: public class A { public static void main(S ...

  9. swing入门例子

    // a simple exmple that can show the basis of swing------------------------------------------------- ...

  10. OC特有语法-分类(category)

    本文转载Keefo. Objective-C的Object-oriented programming特性提供subclass和category这2个比较非常重要的部分.subclass应该反复被各种编 ...