首先我们有一个返回响应的接口HttpCallBackListener

public  interface  HttpCallbackListener {
void onFinish(String response); void onError(Exception e);
}

然后就是工具类的主体了

import android.util.Log;

import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader; import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Map; public class HttpUtil {
//使用Get方法,path存储一个网址,Map存储一个键值对
public static void sendHttpRequestForGet(final String path,final Map<String,String> params , final HttpCallbackListener listener){
new Thread(new Runnable() {
@Override
public void run() {
HttpURLConnection connection=null; try{
StringBuilder stringBuilder=new StringBuilder();
StringBuilder response=new StringBuilder();
stringBuilder.append(path).append("?");
if(params!=null&&params.size()!=0){
for(Map.Entry<String,String> entry:params.entrySet()){
//转换成UTF-8
stringBuilder.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(),"utf-8"));
stringBuilder.append("&");
}
//删除最后一个字符&
stringBuilder.deleteCharAt(stringBuilder.length() - 1);
}
//此时网址变长了,增加了Map中的内容
URL url=new URL(stringBuilder.toString());
//打印网址
Log.e("HttpUtil",stringBuilder.toString()); connection=(HttpURLConnection)url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(100000);
connection.setReadTimeout(100000);
connection.setRequestProperty("Content-Type", "application/json");
//200表示连接成功
if(connection.getResponseCode()==200){
InputStream in=connection.getInputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(in,"utf-8"));
String line;
while ((line=reader.readLine())!=null){
response.append(line);
}
}else{
System.out.println(connection.getResponseCode());
Log.e("HttpUtil","fail");
}
if(listener!=null){
Log.e("HttpUtil",response.toString());
//把response转换为String类型再作为参数传入,以便调用他的类访问
listener.onFinish(response.toString());
}
}catch(Exception e){
if (listener!=null){
listener.onError(e);
}
}finally {
if(connection!=null){
connection.disconnect();
}
}
}
}).start();
} public static void sendHttpRequestForPost(final String path,final Map<String,String> paramsValue, final HttpCallbackListener listener){
new Thread(new Runnable() {
@Override
public void run() {
HttpURLConnection connection=null;
try{
StringBuilder response=new StringBuilder();
JSONObject jsonObject = new JSONObject();
for(Map.Entry<String,String> entry:paramsValue.entrySet()){
jsonObject.put(entry.getKey(),entry.getValue());
}
URL url=new URL(path);
connection=(HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setConnectTimeout(100000);
connection.setReadTimeout(100000);
connection.setDoOutput(true);
connection.setDoInput(true);
//千万要记着这个setRequestProperty
connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
Log.d("HttpUtil", jsonObject.toString());
//将数据写给服务器
DataOutputStream out= new DataOutputStream(connection.getOutputStream());
out.writeBytes(jsonObject.toString());
Log.d("HttpUtil",jsonObject.toString());
//成功
if(connection.getResponseCode()==200){
Log.d("HttpUtil", "success");
InputStream in=connection.getInputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(in,"utf-8"));
String line;
while ((line=reader.readLine())!=null){
response.append(line);
}
}else{
Log.e("HttpUtil",Integer.toString(connection.getResponseCode()));
Log.e("HttpUtil","fail");
}
if(listener!=null){
Log.e("HttpUtil","注册成功");
Log.e("HttpUtil",response.toString());
listener.onFinish(response.toString());
}
}catch(Exception e){
if (listener!=null){
Log.d("HttpUtil",e.getMessage());
listener.onError(e);
}
}finally {
if(connection!=null){
connection.disconnect();
}
}
}
}).start();
}
}

假设我们要在MainActivity中访问

httpUtil.sendHttpRequestForGet("http://210.38.111.146:8080/WindBell/rest/login", map, new HttpCallbackListener() {
@Override
public void onFinish(String response) {
//得到了response后就方便多了
} @Override
public void onError(Exception e) { }
});

HttpUrlConnection使用Get和Post访问服务器的工具类(一)的更多相关文章

  1. OkHttp使用Get和Post访问服务器的工具类(一)

    首先来简单介绍一下okttp框架,类似于HttpUrlConnection,Android6.0以后,废弃了Apache Http Client,只有HttpUrlConnection和OkHttp了 ...

  2. java http工具类和HttpUrlConnection上传文件分析

    利用java中的HttpUrlConnection上传文件,我们其实只要知道Http协议上传文件的标准格式.那么就可以用任何一门语言来模拟浏览器上传文件.下面有几篇文章从http协议入手介绍了java ...

  3. 分享自己配置的HttpURLConnection请求数据工具类

    >>该工具类传入string类型url返回string类型获取结果import java.io.BufferedReader;import java.io.InputStream;impo ...

  4. java工具类

    1.HttpUtilsHttp网络工具类,主要包括httpGet.httpPost以及http参数相关方法,以httpGet为例:static HttpResponse httpGet(HttpReq ...

  5. Http、Https请求工具类

    最近在做微信开发,使用http调用第三方服务API,有些是需要https协议,通过资料和自己编码,写了个支持http和https的工具类,经验证可用,现贴出来保留,也供需要的人使用(有不足的地方,也请 ...

  6. Android开发常用工具类

    来源于http://www.open-open.com/lib/view/open1416535785398.html 主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java. 目前 ...

  7. HttpTool.java(在java tool util工具类中已存在) 暂保留

    HttpTool.java 该类为java源生态的http 请求工具,不依赖第三方jar包 ,即插即用. package kingtool; import java.io.BufferedReader ...

  8. 53. Android常用工具类

    主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java.目前包括HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils.Prefer ...

  9. android下载简单工具类

    功能是实现下载文件,图片或MP3等,为了简单起见使用单线程,此代码为MarsAndroid教程的复制品,放在此处,留着参考. 首先是一个得到字节流随后保存到内存卡上的工具类: package com. ...

随机推荐

  1. MysQL使用一与Python交互

    与python交互 在熟练使用sql语句的基础上,开始使用python语言提供的模块与mysql进行交互 这是我们在工作中大事要做的事 先学会sql是基础,一定要熟练编写sql语句 安装引入模块 安装 ...

  2. shiro对事务的影响

    记一个 No transaction aspect-managed TransactionStatus in scope 错误的解决方法 昨天出现一个BUG,事务没有加回滚成功,修改管理员密码事务没有 ...

  3. SpringMvc 笔记

    整理出来是 SpringMvc 笔记 方便以后查询 框架太多了 不经常使用 忘记的可能性很大 自己整理一套笔记 一看就明白了 1 对比 原始请求响应流程 1 发送请求 --> 2 控制层 --& ...

  4. spring boot2.1读取 apollo 配置中心1

    第一篇:搭建apollo配置中心 为什么选择apollo,我做了一些对比:   Diamond Disconf Apollo Spring Cloud Config 数据持久性 mysql mysql ...

  5. RabbitMQ 之消息确认机制(事务+Confirm)

    概述 在 Rabbitmq 中我们可以通过持久化来解决因为服务器异常而导致丢失的问题,除此之外我们还会遇到一个问题:生产者将消息发送出去之后,消息到底有没有正确到达 Rabbit 服务器呢?如果不错得 ...

  6. 缓存技术内部交流_04_Cache Aside续篇

    额外参考资料: http://www.ehcache.org/documentation/3.2/expiry.html F. Cache Aside 模式的问题:缓存过期 有时我们会在上线前给缓存系 ...

  7. Python 输出百分比的两种方式

    Python 输出百分比的两种方式 注: 在python3环境下测试. 方式1:直接使用参数格式化:{:.2%} {:.2%}: 显示小数点后2位 显示小数点后2位: >>> pri ...

  8. MVVM模式的3种command总结[1]--DelegateCommand

    MVVM模式的3种command总结[1]--DelegateCommand 查了不少资料,大概理清楚的就是有3种.当然类名可以自己取了,不过为了便于记忆和区分,还是和看到的文章里面用一样的类名. 1 ...

  9. 网页上播放音频、视频Mp3,Mp4

    昨天在处理网页上播放音频mp3,视频mp4上用了一天的时间来比较各种方案,最终还是选择了HTML5的 标签,谷歌浏览器.IE浏览器对标签的支持都很好,火狐上需要安装quicktime插件,效果比较差. ...

  10. Lua学习笔记3. 函数可变参数和运算符、转义字符串、数组

    1. Lua函数可以接受变长数目的参数,和C语言类似,在函数的参数列表中使用(...)表示函数可以接受变长参数 lua函数将参数存放在一个table中,例如arg,那么#arg可以获得参数的个数 fu ...