package com.pan.simplepicture.http.protocol; import java.net.URLEncoder; import java.util.Map; import org.json.JSONObject; import android.text.TextUtils; import android.util.Log; import com.pan.simplepicture.activity.BaseActivity; import com.pan.simplepicture.http.HttpHelper; import com.pan.simplepicture.http.HttpHelper.HttpResult; import com.pan.simplepicture.utils.MapUtil; import com.pan.simplepicture.utils.SharedPreferencesUtils; /** * Created by efida on 2014/6/7. */ public abstract class BaseProtocol<T> { public static final String cachePath = ""; /** * 从本来加载缓存数据 * * @param context * 上下文 * @param map * 请求参数 * @return */ protected String loadFromLocal(BaseActivity mActivity, Map<String, String> map) { return SharedPreferencesUtils.getString(mActivity, getKey() + getParames(map, true), ""); } /** * 判断是否加载成功 * * @param json * @return * @throws Exception */ protected boolean isSuccess(String json) throws Exception { if (!TextUtils.isEmpty(json)) { JSONObject o = new JSONObject(json); int status = o.optInt("status"); if (200 == status) { return true; } } return false; } /** * 缓存数据 * * @param context * @param str * @param index */ protected void saveToLocal(BaseActivity mActivity, String json, Map<String, String> map) { SharedPreferencesUtils.saveString(mActivity, getKey() + getParames(map, true), json); } // ========================================new==========================================// /** * 加载数据 * * @param context * @param map * 请求参数 * @param cache * CacheType 缓存 * @return */ public T loadInfo(BaseActivity mActivity, Map<String, String> map, boolean cache) { String json = null; if (cache) { String net = loadFromNet(map); if (net != null) { json = net; // 3.把数据保存到本地保存到本地 saveToLocal(mActivity, json, map); } else { json = loadFromLocal(mActivity, map); } } if (TextUtils.isEmpty(json)) { return null; } return parseFromJson(json); } /** * 从网络上加载数据 * * @param map * @return */ private String loadFromNet(Map<String, String> map) { String result = null; String url = getKey() + getParames(map, false); Log.i(getKey(), url); HttpResult httpResult = HttpHelper.get(url); if (httpResult != null) { result = httpResult.getString(); httpResult.close(); } return result; } /** 该协议的访问地址 */ protected abstract String getKey(); /** * 把参数拼接成url参数的形式 * * @param map * 请求参数的集合 * @return */ protected String getParames(Map<String, String> map, boolean isSave) { Object[] keys = MapUtil.getKeyArray(map); StringBuffer sb = new StringBuffer(); for (Object key : keys) { String strKey = key.toString(); if (isSave && ("timestamp".equals(strKey) || "access_token" .equals(strKey))) { continue; } sb.append("&" + strKey + "=" + map.get(strKey)); } return sb.toString().replaceFirst("&", "?"); } /** 从json中解析 */ protected abstract T parseFromJson(String json); }