package com.android.pc.ioc.internet;
import java.io.File;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import android.app.Activity;
import com.android.pc.ioc.app.Ioc;
import com.android.pc.ioc.internet.FastHttp.AjaxTask;
import com.android.pc.ioc.internet.FastHttp.Progress;
import com.android.pc.ioc.internet.FastHttp.TimeTask;
import com.android.pc.ioc.invoker.InjectInvoker;
import com.android.pc.ioc.util.ContextUtils;
public class FastHttpHander {
/**
* 异步 post请求 无参数 默认下载配置器
*
* @author gdpancheng@gmail.com 2013-5-20 下午2:49:57
* @param url
* 请求url
* @param object
* 回调函数
* @return void
*/
public static void ajax(String url, Object object) {
ajax(url, null, InternetConfig.defaultConfig(), object);
}
/**
* 异步 post请求 无参数 自定义下载配置
*
* @author gdpancheng@gmail.com 2013-5-20 下午2:50:48
* @param url
* 请求连接
* @param config
* 自定义下载配置
* @param object
* 回调函数
* @return void
*/
public static void ajax(String url, InternetConfig config, Object object) {
ajax(url, null, config, object);
}
/**
* 异步 post请求 有参数 默认下载配置
*
* @author gdpancheng@gmail.com 2013-5-20 下午2:51:48
* @param url
* 请求url
* @param params
* 请求参数
* @param object
* 回调函数
* @return void
*/
public static void ajax(String url, LinkedHashMap<String, String> params, Object object) {
ajax(url, params, InternetConfig.defaultConfig(), object);
}
/**
* 异步 post异步获取 有参数 自定义下载配置
*
* @author gdpancheng@gmail.com 2013-5-20 下午2:54:08
* @param url
* 请求连接
* @param params
* 请求参数
* @param config
* 请求配置
* @param object
* 回调函数
* @return void
*/
public static void ajax(String url, LinkedHashMap<String, String> params, final InternetConfig config, final Object object) {
config.setRequest_type(InternetConfig.request_post);
AjaxCallBack callBack = new AjaxCallBack() {
@Override
public void callBack(ResponseEntity status) {
http_inject(status, object, config);
}
@Override
public boolean stop() {
return isDestory(object);
}
};
new Thread(new AjaxTask(url, params, config, callBack)).start();
}
/**
* 异步post定时轮询
*
* @author gdpancheng@gmail.com 2013-6-8 下午2:05:07
* @param url
* @param object
* @return void
*/
public static void ajax(String url, AjaxTimeCallBack object) {
InternetConfig config = InternetConfig.defaultConfig();
config.setRequest_type(InternetConfig.request_post);
ajax(url, null, config, object);
}
/**
* 异步post定时轮询
*
* @author gdpancheng@gmail.com 2013-6-8 下午2:06:54
* @param url
* @param params
* @param object
* @return void
*/
public static void ajax(String url, LinkedHashMap<String, String> params, AjaxTimeCallBack object) {
InternetConfig config = InternetConfig.defaultConfig();
config.setRequest_type(InternetConfig.request_post);
ajax(url, params, config, object);
}
/**
* 异步 post异步获取 定时请求(轮询)有参数 自定义下载配置 回调函数
*
* @author gdpancheng@gmail.com 2013-5-20 下午2:52:52
* @param url
* 请求连接
* @param params
* 请求参数
* @param config
* 请求配置
* @param object
* 回调函数
* @return void
*/
public static void ajax(String url, LinkedHashMap<String, String> params, InternetConfig config, AjaxTimeCallBack object) {
config.setRequest_type(InternetConfig.request_post);
new Thread(new TimeTask(url, params, config, object)).start();
}
/**
* 异步表单提交
*
* @author gdpancheng@gmail.com 2013-6-8 下午2:03:10
* @param url
* @param object
* @return void
*/
public static void ajaxForm(String url, Object object) {
ajaxForm(url, null, null, InternetConfig.defaultConfig(), object);
}
/**
* 异步表单提交 自定义配置
*
* @author gdpancheng@gmail.com 2013-6-8 下午2:03:22
* @param url
* @param config
* @param object
* @return void
*/
public static void ajaxForm(String url, InternetConfig config, Object object) {
ajaxForm(url, null, null, config, object);
}
/**
* 异步表单提交 有参数
*
* @author gdpancheng@gmail.com 2013-6-8 下午2:03:37
* @param url
* @param params
* @param object
* @return void
*/
public static void ajaxForm(String url, LinkedHashMap<String, String> params, Object object) {
ajaxForm(url, params, null, InternetConfig.defaultConfig(), object);
}
/**
* 自定义表单提交有参数 有文件
*
* @author gdpancheng@gmail.com 2013-6-8 下午2:03:57
* @param url
* @param params
* @param files
* @param object
* @return void
*/
public static void ajaxForm(String url, LinkedHashMap<String, String> params, HashMap<String, File> files, Object object) {
ajaxForm(url, params, files, InternetConfig.defaultConfig(), object);
}
public static void ajaxForm(String url, LinkedHashMap<String, String> params, HashMap<String, File> files, Object object, Progress progress) {
ajaxForm(url, params, files, InternetConfig.defaultConfig(), object);
}
/**
* 自定义表单提交有参数 有文件 自定义下载配置
*
* @author gdpancheng@gmail.com 2013-6-8 下午2:04:38
* @param url
* @param params
* @param files
* @param config
* @param object
* @return void
*/
public static void ajaxForm(String url, LinkedHashMap<String, String> params, HashMap<String, File> files, final InternetConfig config, final Object object) {
config.setRequest_type(InternetConfig.request_form);
config.setFiles(files);
AjaxCallBack callBack = new AjaxCallBack() {
@Override
public void callBack(ResponseEntity status) {
http_inject(status, object, config);
}
@Override
public boolean stop() {
return isDestory(object);
}
};
new Thread(new AjaxTask(url, params, config, callBack)).start();
}
/**
* 异步get获取
*
* @author gdpancheng@gmail.com 2013-5-22 下午1:34:42
* @param url
* 请求路径
* @param object
* 回调函数
* @return void
*/
public static void ajaxGet(String url, Object object) {
ajaxGet(url, null, InternetConfig.defaultConfig(), object);
}
/**
* 异步get获取
*
* @author gdpancheng@gmail.com 2013-5-22 下午1:35:20
* @param url
* 请求路径
* @param config
* 配置文件
* @param object
* 回调函数
* @return void
*/
public static void ajaxGet(String url, InternetConfig config, Object object) {
ajaxGet(url, null, config, object);
}
/**
* 异步get获取
*
* @author gdpancheng@gmail.com 2013-5-22 下午1:36:13
* @param url
* 请求路径
* @param params
* 参数
* @param object
* 回调函数
* @return void
*/
public static void ajaxGet(String url, LinkedHashMap<String, String> params, Object object) {
ajaxGet(url, params, InternetConfig.defaultConfig(), object);
}
/**
* get异步获取
*
* @author gdpancheng@gmail.com 2013-5-22 下午1:36:39
* @param url
* 请求路径
* @param params
* 参数
* @param config
* 下载配置
* @param object
* 回调函数
* @return void
*/
public static void ajaxGet(String url, LinkedHashMap<String, String> params, final InternetConfig config, final Object object) {
if (config == null) {
Ioc.getIoc().getLogger().e(object.getClass().getSimpleName() + " 的网络请求配置不能为空\n");
return;
}
config.setRequest_type(InternetConfig.request_get);
AjaxCallBack callBack = new AjaxCallBack() {
@Override
public void callBack(ResponseEntity status) {
http_inject(status, object, config);
}
@Override
public boolean stop() {
return isDestory(object);
}
};
new Thread(new AjaxTask(url, params, config, callBack)).start();
}
/**
* get异步获取 定时请求(轮询)
*
* @author gdpancheng@gmail.com 2013-5-22 下午1:38:32
* @param url
* 请求路径
* @param params
* 参数
* @param config
* 下载配置
* @param object
* 回调函数
* @return void
*/
public static void ajaxGet(String url, LinkedHashMap<String, String> params, InternetConfig config, AjaxTimeCallBack object) {
if (config == null) {
config = InternetConfig.defaultConfig();
}
config.setRequest_type(InternetConfig.request_get);
new Thread(new TimeTask(url, params, config, object)).start();
}
/**
* 异步 post请求 无参数 默认下载配置器
*
* @author gdpancheng@gmail.com 2013-5-20 下午2:49:57
* @param url
* 请求url
* @param object
* 回调函数
* @return void
*/
public static void ajaxWebServer(String url, String method, Object object) {
InternetConfig config = new InternetConfig();
config.setMethod(method);
config.setRequest_type(InternetConfig.request_webserver);
ajaxWebServer(url, method, null, config, object);
}
/**
* 异步 post请求 无参数 自定义下载配置
*
* @author gdpancheng@gmail.com 2013-5-20 下午2:50:48
* @param url
* 请求连接
* @param config
* 自定义下载配置
* @param object
* 回调函数
* @return void
*/
public static void ajaxWebServer(String url, String method, InternetConfig config, Object object) {
ajaxWebServer(url, method, null, config, object);
}
/**
* 异步 post请求 有参数 默认下载配置
*
* @author gdpancheng@gmail.com 2013-5-20 下午2:51:48
* @param url
* 请求url
* @param params
* 请求参数
* @param object
* 回调函数
* @return void
*/
public static void ajaxWebServer(String url, String method, LinkedHashMap<String, String> params, Object object) {
InternetConfig config = InternetConfig.defaultConfig();
config.setMethod(method);
config.setRequest_type(InternetConfig.request_webserver);
ajaxWebServer(url, method, params, config, object);
}
/**
* 异步 post异步获取 有参数 自定义下载配置
*
* @author gdpancheng@gmail.com 2013-5-20 下午2:54:08
* @param url
* 请求连接
* @param params
* 请求参数
* @param config
* 请求配置
* @param object
* 回调函数
* @return void
*/
public static void ajaxWebServer(String url, String method, LinkedHashMap<String, String> params, final InternetConfig config, final Object object) {
if (config == null) {
Ioc.getIoc().getLogger().e(object.getClass().getSimpleName() + " 的网络请求配置不能为空\n");
return;
}
config.setMethod(method);
config.setRequest_type(InternetConfig.request_webserver);
AjaxCallBack callBack = new AjaxCallBack() {
@Override
public void callBack(ResponseEntity status) {
http_inject(status, object, config);
}
@Override
public boolean stop() {
return isDestory(object);
}
};
new Thread(new AjaxTask(url, params, config, callBack)).start();
}
/**
* 异步 post异步获取 定时请求(轮询)有参数 默认下载配置 回调函数
*
* @author gdpancheng@gmail.com 2013-5-20 下午2:52:52
* @param url
* 请求连接
* @param params
* 请求参数
* @param config
* 请求配置
* @param object
* 回调函数
* @return void
*/
public static void ajaxWebServer(String url, String method, LinkedHashMap<String, String> params, AjaxTimeCallBack object) {
InternetConfig config = InternetConfig.defaultConfig();
config.setMethod(method);
config.setRequest_type(InternetConfig.request_webserver);
new Thread(new TimeTask(url, params, config, object)).start();
}
/**
* 异步 post异步获取 定时请求(轮询)有参数 自定义下载配置 回调函数
*
* @author gdpancheng@gmail.com 2013-5-20 下午2:52:52
* @param url
* 请求连接
* @param params
* 请求参数
* @param config
* 请求配置
* @param object
* 回调函数
* @return void
*/
public static void ajaxWebServer(String url, String method, LinkedHashMap<String, String> params, InternetConfig config, AjaxTimeCallBack object) {
if (config == null) {
config = InternetConfig.defaultConfig();
}
config.setMethod(method);
config.setRequest_type(InternetConfig.request_webserver);
new Thread(new TimeTask(url, params, config, object)).start();
}
private static void http_inject(ResponseEntity entity, Object object, InternetConfig config) {
ArrayList<InjectInvoker> ok = ContextUtils.getHttpOkInvokers(object.getClass(), config.getKey());
if (ok == null) {
ok = ContextUtils.getHttpOkInvokers(object.getClass(), ContextUtils.ID_NONE);
}
ArrayList<InjectInvoker> err = ContextUtils.getHttpErrInvokers(object.getClass(), config.getKey());
if (err == null) {
err = ContextUtils.getHttpErrInvokers(object.getClass(), ContextUtils.ID_NONE);
}
ArrayList<InjectInvoker> arrayList = ContextUtils.getHttpAllInvokers(object.getClass(), config.getKey());
if (arrayList == null) {
arrayList = ContextUtils.getHttpAllInvokers(object.getClass(), ContextUtils.ID_NONE);
}
if (entity.getStatus() == FastHttp.result_ok) {
if (ok == null && arrayList == null) {
Ioc.getIoc().getLogger().e(object.getClass().getSimpleName() + " 的网络请求" + entity.getUrl() + "\nkey为" + entity.getKey() + "没有增加回调方法注释 请检查\n");
return;
}
if (ok == null) {
if (arrayList != null) {
for (InjectInvoker injectInvoker : arrayList) {
injectInvoker.invoke(object, entity);
}
}
return;
}
for (InjectInvoker injectInvoker : ok) {
injectInvoker.invoke(object, entity);
}
} else {
if (err == null && arrayList == null) {
Ioc.getIoc().getLogger().e(object.getClass().getSimpleName() + " 的网络请求" + entity.getUrl() + "\nkey为" + entity.getKey() + "没有增加回调方法注释 请检查\n");
return;
}
if (err == null) {
if (arrayList != null) {
for (InjectInvoker injectInvoker : arrayList) {
injectInvoker.invoke(object, entity);
}
}
return;
}
for (InjectInvoker injectInvoker : err) {
injectInvoker.invoke(object, entity);
}
}
}
private static boolean isDestory(Object object) {
if (Activity.class.isAssignableFrom(object.getClass())) {
return ((Activity) object).isFinishing();
}
try {
Class<?> clazz = Class.forName("android.support.v4.app.Fragment");
Class<?> clazz2 = Class.forName("android.app.Fragment");
if (clazz.isAssignableFrom(object.getClass()) || clazz2.isAssignableFrom(object.getClass())) {
Method isDetached = object.getClass().getMethod("isDetached", null);
Method isRemoving = object.getClass().getMethod("isRemoving", null);
return Boolean.valueOf(isDetached.invoke(object).toString()) && Boolean.valueOf(isRemoving.invoke(object).toString());
}
} catch (Exception e) {
}
return false;
}
}