Android 有缓存功能的请求封装接口
/*
* @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 有缓存功能的请求封装接口的更多相关文章
- Android清除缓存功能来实现
我们都知道在Android的设置->应用程序中能够查看应用程序的相关信息,当中有一个功能是清除缓存. 如图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZ ...
- android 清除缓存功能
本应用数据清除管理器 DataCleanManager.java 是从网上摘的 忘了 名字了 对不住了 载入一个webview 产生缓存 众所周知的webview是产生缓存的主要原因之中的一 ...
- Android,适合Restful网络请求封装
借助volley.Gson类库. 优点 网络请求集中处理,返回值直接为预期的对象,不需要手动反序列,提高效率,使用时建立好model类即可. 使用效果 DataProess.Request(true, ...
- android:Android 6.0权限控制代码封装
新建的Activity类可以继承这个Activity,这个类封装了关于新版的权限处理相关的代码 使用方法: package com.glsite.phone; import android.conte ...
- Flutter 实际开发常用工具类(全局提示,请求封装,token缓存,验证码倒计时、常用窗帘动画及布局)
介绍: 一星期从入门到实际开发经验分享及总结 代码传送门github Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面.未来App开发 ...
- Postman - 功能强大的 API 接口请求调试和管理工具
Postman 是一款功能强大的的 Chrome 应用,可以便捷的调试接口.前端开发人员在开发或者调试 Web 程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的 Fi ...
- 基于AFN封装的带缓存的网络请求
给大家分享一个基于AFN封装的网络请求 git: https://github.com/zhouxihi/NVNetworking #带缓存机制的网络请求 各类请求有分带缓存 , 不带缓存, 可自定义 ...
- Android记录20-获取缓存大小和清除缓存功能
Android开发记录20-获取缓存大小和清除缓存功能 转载请注明:IT_xiao小巫 博客地址:http://blog.csdn.net/wwj_748 前言 本篇博客要给大家分享的如何获取应用缓存 ...
- angular cli http请求封装+拦截器配置+ 接口配置文件
内容:接口配置文件.http请求封装 .拦截器验证登录 1.接口配置文件 app.api.ts import { Component, OnInit } from '@angular/core'; / ...
随机推荐
- Teach Yourself Scheme in Fixnum Days 6 recursion递归
A procedure body can contain calls to other procedures, not least itself: (define factorial (lambda ...
- Memcached和Redis异同
在考虑对应用程序的性能表现进行提升时,缓存机制往往是解决问题的重要起点,而Memcached与Redis则经常被作为初步方案来加以比较.这两套声名显赫的缓存引擎拥有着诸多相似之处,但它们同样也具备大量 ...
- Java Access Levels(访问控制)
Access Levels Modifier Class Package Subclass World public Y Y Y Y protected Y Y Y N no modifier Y Y ...
- Struts2小结
Struts 2是在WebWork2基础发展而来的. 注意:struts 2和struts 1在代码风格上几乎不一样. Struts 2 相比Struts 1的优点: 1.在软件设计上Struts 2 ...
- 利用libevent的timer实现定时器interval
在不怎么了解libevent的情况下,看到timer这个关键字想到可以用来做定时任务,官方资料也不齐全,就从代码里看到了TIMEOUT字样,这么说来应该是支持timeout了,那interval呢,貌 ...
- JavaScript 判断一个字符串是否在另一个字符串中
传统上,JavaScript只有indexOf方法,可以用来确定一个字符串是否包含在另一个字符串中.ES6又提供了三种新方法. includes():返回布尔值,表示是否找到了参数字符串. start ...
- Laravel Eloquent ORM
Eloquent ORM 简介 基本用法 集体赋值 插入.更新.删除 软删除 时间戳 查询范围 关系 查询关系 预先加载 插入相关模型 触发父模型时间戳 与数据透视表工作 集合 访问器和调整器 日期调 ...
- webform开发经验(一):Asp.Net获取Checkbox选中的值
webform中获取repeat控件列表下的checkbox选中的值: 码农上代码: public static string getSelectedIDs(Repeater Rpt_) { stri ...
- (转)用来理解Java的8个图表
很多时候,一张图比你说 1000 个字能更有效的说清楚一个问题.我们列举了 8 个关于 Java 语言的图表,或许可以让你对 Java 有着更深入的认识. 1.字符串不变性(String Immuta ...
- Silverlight 图表下载到Excel文件中
一.Silverlight xaml.cs文件按钮触发方法 1.//下载图表 private void btnDown_Click(object sender, RoutedEventA ...