首先我们有一个返回响应的接口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. validateJarFile jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

    项目环境 Maven.Tomcat7.0.27.jdk1.8.0_111 报这个错误的原因是项目中依赖 javax.servlet-api 包和Tomcat本身的包冲突了,Tomcat本身也有这个包 ...

  2. MapReduce实现共同朋友问题

    答案: package com.duking.mapreduce; import java.io.IOException; import java.util.Set; import java.util ...

  3. Flume NG初次使用

    一.什么是Flume NG Flume是一个分布式.可靠.和高可用性的海量日志采集.聚合和传输的系统,支持在日志系统中定制各类数据发送方,用于收集数据:同时Flume提供对数据的简单处理,并写到各种数 ...

  4. 04_Storm编程上手_WordCount集群模式运行

    1. 要解决的问题:代码打包 前一篇的代码,在IDEA中通过maven工程创建,通过IDEA完成代码打包 1)File -> Project Structure  2) 选择Artifacts, ...

  5. HttpServlet实现serializable

    Java Servlet Technology Overview Servlets are the Java platform technology of choice for extending a ...

  6. Unique Binary Search Trees,Unique Binary Search Trees2 生成二叉排序树

    Unique Binary Search Trees:求生成二叉排序树的个数. Given n, how many structurally unique BST's (binary search t ...

  7. 【Python】 简易实现接口测试自动化

    实现思路 使用excel管理用例用例信息,requests模块发送http请求,实现了记录日志,邮件发送测试报告的功能 目录结构如下: 下面直接上代码: 统筹脚本 # -*- coding:utf-8 ...

  8. mysql 查看表信息

    desc 表名; 查看表结构信息 show create table 表名; 查询建表详细信息 select COLUMN_NAME,COLUMN_TYPE,COLUMN_COMMENT from i ...

  9. LR简单解析

  10. delphi ScriptGate 调用JS

    在 FireMonkey 使用 TWebBrowser 调用 Javascript函数并获取返回值以及 JavaScript 中调 Delphi 的函数/过程,普遍都在使用老掉牙的URL重定的方法,还 ...