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";
        }
    }

 

posted @ 2016-05-24 11:45  星辰之力  阅读(1297)  评论(0编辑  收藏  举报