/*
* @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. [置顶] 【原创分享】嵌入式linux应用之内核移植定制篇-前篇(linux-3.8.12 mini2440)--20130824

    移植的话其实很早就做过了,不过那时用的友善定制的老版本2.6.32 驱动什么的全部弄好了,仅仅用默认配置而已.基本不用改动什么,很简单. 内核更新其实非常的快,今天我就用个3.8.12来移植. 当然, ...

  2. 【转】FAE及其发展前景

    原文网址:http://blog.sina.com.cn/s/blog_6e80c27b0100okd9.html FAE Field Application Engineer(现场应用工程师) ,其 ...

  3. 使用python/casperjs编写终极爬虫-客户端App的抓取-ZOL技术频道

    使用python/casperjs编写终极爬虫-客户端App的抓取-ZOL技术频道 使用python/casperjs编写终极爬虫-客户端App的抓取

  4. SVN 一次性提交多个目录中文件

    情况一:将项目中未加入版本控制的文件提交到版本库. 在使用WINDOW下的SVN客户端工具时,在提交一个项目的文件时,如果有未加入版本库的文件,这时可以先将未加入的文件选中,然后一起提交. 但在LIN ...

  5. IOS uitableviewcell 向左滑动删除编辑等

    主要实现这个方法就好了 -(NSArray<UITableViewRowAction *> *)tableView:(UITableView *)tableView editActions ...

  6. PyInstaller打包Python脚本为exe

    1.PyInstaller-3.1.1  百度云链接  http://pan.baidu.com/s/1jHYWin8 密码  oapl 2.安装最新版本的 pywin32-217.win32-py2 ...

  7. linux core dump学习

    1. core dump是什么? core dump又叫核心转储,当操作系统收到特定的signal时, 会生成某个进程的core dump文件.这样程序员可以根据 已经生成的core dump文件来d ...

  8. [Cycle.js] Main function and effects functions

    We need to give structure to our application with logic and effects. This lessons shows how we can o ...

  9. C# 大小写转换

    全部大写: string upper = str.ToUpper() 全部小写: string lower = str.ToLower(); str是需要转换的字符.

  10. CSS基础知识笔记(一)

    css 样式由选择符和声明组成,而声明又由属性和值组成: 选择符: 又称选择器,指明网页中要应用样式规则的元素,如本例中是网页中所有的段(p)的文字将变成蓝色,而其他的元素(如ol)不会受到影响. 声 ...