封装的HttpClient工具类
2016-05-06 17:31
465 查看
此工具类封装了HttpClient和handler以及接口回调,可以在主线程运行post和get方法,通过实现CallBack得到返回结果。
网络请求的工具类
回调接口
主线程中请求代码
网络请求的工具类
import android.os.Handler; import android.os.Looper; import android.util.Log; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.params.CoreConnectionPNames; import org.apache.http.util.EntityUtils; import org.json.JSONObject; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; public class HttpUtil { private static final String CHARSET = "UTF-8"; private final static int TIME_OUT = 1000 * 15; //must on ui thread public static void get(final String url, final LinkedHashMap<String,String> params, final Callback callback) { final Handler handler = new Handler(); new Thread(new Runnable() { @Override public void run() { Looper.prepare(); String uri = urlBuild(url, params); Log.d("httpUtil--get",uri); HttpGet getMethod = new HttpGet(uri); HttpClient httpClient = new DefaultHttpClient(); //请求超时 httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, TIME_OUT); //读取超时 httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, TIME_OUT); try { HttpResponse response = httpClient.execute(getMethod); //发起GET请求 int statusCode = response.getStatusLine().getStatusCode(); String result = EntityUtils.toString(response.getEntity(), CHARSET); resultHandler(statusCode, result, callback, handler); } catch (Exception e) { failureHandler(handler, callback, e); } } }).start(); } //must on ui thread public static void post(final String url, final LinkedHashMap<String,String> params, final Callback callback) { final Handler handler = new Handler(); new Thread(new Runnable() { @Override public void run() { try { Looper.prepare(); HttpClient client = new DefaultHttpClient(); //请求超时 client.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, TIME_OUT); //读取超时 client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, TIME_OUT); HttpPost postMethod = new HttpPost(url); String parstring =new JSONObject( params).toString(); List<NameValuePair> datas = new ArrayList<NameValuePair>(); datas.add(new BasicNameValuePair("data", DesUtils.encode(parstring))); postMethod.setEntity(new UrlEncodedFormEntity(datas, CHARSET)); //将参数填入POST Entity中 HttpResponse response = client.execute(postMethod); //执行POST方法 int statusCode = response.getStatusLine().getStatusCode(); String result = EntityUtils.toString(response.getEntity(), CHARSET); resultHandler(statusCode, result, callback, handler); } catch (Exception e) { failureHandler(handler, callback, e); } } }).start(); } public static String urlBuild(String url,LinkedHashMap<String, String> parameter) { StringBuilder stringBuilder = new StringBuilder(); if (parameter == null || parameter.size() ==0){ return url; } for (String key : parameter.keySet()){ if (stringBuilder.length() == 0){ stringBuilder.append(url+"?"+key + "=" + parameter.get(key)); }else { stringBuilder.append("&" + key + "=" + parameter.get(key)); } } return stringBuilder.toString(); } private static void failureHandler(Handler handler, final Callback callback, final Exception e) { handler.post(new Runnable() { @Override public void run() { callback.onFailure(e.getMessage()); } }); } private static void resultHandler(final int code, final String result, final Callback callback, Handler handler) { handler.post(new Runnable() { @Override public void run() { if (callback != null) { if (code == HttpStatus.SC_OK) { //success callback.onSuccess(result); } else { callback.onFailure(result); } } } }); } }
回调接口
public interface Callback { void onSuccess(String result); void onFailure(String result); }
主线程中请求代码
//post请求和get的请求参数写法相同) LinkedHashMap<String, String> paramMap = new LinkedHashMap<String, String>(); paramMap.put("name", "momo"); paramMap.put("age", "18"); HttpUtil.post("http://192.168.0.252:8080/post.do", paramMap, new Callback() { @Override public void onSuccess(String result) { Log.d("result","成功"); } @Override public void onFailure(String result) { Log.d("result","失败"); } });
相关文章推荐
- Http与https的总结
- iOS网络编程TCP/IP应用篇(五)-发送数据及其它(加密,重连)
- iOS 网络编程之TCP/IP <四> 根据协议解析数据
- 微软下载http://www.itellyou.cn/,系统、MSDN等
- redis在win10中出现Creating Server TCP listening socket *:6379: bind: No such file or directory
- iOS 网络编程之TCP/IP <三> 协议的定制
- iOS 网络编程之TCP/IP <二> 框架的二次封装
- okhttp3与旧版本okhttp的区别分析
- 网络层协议之报文控制机协议ICMP
- 使用AFNetworking, SDWebimage和OHHTTPStubs
- gSOAP使用的网络模型
- iOS 网络编程之TCP/IP <一>框架介绍
- IOS开发 轻松掌握AFN网络框架
- 从网络获取数据(1)从newThread到AsyncTask在到IntentService
- 文件远程下载和查看
- 用CornerStone配置SVN,HTTP及svn简单使用说明
- BZOJ4538: [Hnoi2016]网络
- Tomcat服务器常用配置和HTTP简介
- 网络加载图片问题
- JavaWeb学习篇之----HTTP协议详解