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

首先我们有一个返回响应的接口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) {

                            }
                        });
时间: 2024-12-17 05:50:52

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

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

首先来简单介绍一下okttp框架,类似于HttpUrlConnection,Android6.0以后,废弃了Apache Http Client,只有HttpUrlConnection和OkHttp了,相对而言,OkHttp越来越受到开发者的喜爱,那么它的优势在哪呢? 1,支持SPDY,共享同一个Socket来处理同一个服务器的所有请求2,如果SPDY不可用,则通过连接池来减少请求延时3,无缝的支持GZIP来减少数据流量4,缓存响应数据来减少重复的网络请求 SPDY(读作“SPeeDY”)是Go

HttpUtils.java 网络下载工具类

package Http; import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL; /** * 网络下载工具类 * 功能:下载字节数组,下载文本数据 * 下载数字数组(文本 图片 mp3) * 下载文本数据 * Created by lxj-pc on 2017/

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

利用java中的HttpUrlConnection上传文件,我们其实只要知道Http协议上传文件的标准格式.那么就可以用任何一门语言来模拟浏览器上传文件.下面有几篇文章从http协议入手介绍了java中上传文件. Java使用HttpURLConnection上传文件 使用HttpUrlConnection进行post请求上传文件 封装HttpClient4.3.x包括文件上传 使用 HttpClient 4 进行文件上传 httpclient4教程 下面分享一个自己封装的http工具类(暂不直

Android开发常用工具类

来源于http://www.open-open.com/lib/view/open1416535785398.html 主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java. 目前包括  HttpUtils.DownloadManagerPro.Safe.ijiami.ShellUtils.PackageUtils. PreferencesUtils.JSONUtils.FileUtils.ResourceUtils.StringUtils. ParcelUtils.Rand

Android实战简易教程-第五十枪(工具类的测试)

在开发中,为了提高开发效率,我们一般会自定义自己的工具类.为了保证项目的可靠性,在将工具类引入项目之前,我们一般都会对工具类进行单元测试,下面我们通过一个实例看一下如何搭建测试环境. 1.首先自定义一个工具类,这里我们自定义了一个连接图灵机器人API的网络测试类: package com.yayun.chatrobot.utils; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.I

不适用工具类解析Json

解析的数据: { "citycode": "101051301", "citydesc": "黑龙江 双鸭山", "cityname": "双鸭山", "data": [ { "date": "2015-08-29", "icon": "d07|n07", "temperatur

摘录android工具类

1 import android.content.Context; 2 import android.content.pm.PackageInfo; 3 import android.content.pm.PackageManager; 4 import android.content.pm.PackageManager.NameNotFoundException; 5 6 //跟App相关的辅助类 7 public class AppUtils 8 { 9 10 private AppUtil

Bitmap工具类

一直在使用的一个Bitmap工具类 处理Bitmap和ImageView对象,实现了以下功能: 1.saveBitmap: 把Bitmap对象持久存储到SD卡或手机内存. 2.getViewBitmap: 从view得到bitmap对象 3.addWatermark: Bitmap加水印 4.zoomBitmap: 放大缩小图片 5.getLoacalBitmap: 传入路径,从持久存储(SD卡或手机内存)得到Bitmap对象 6.getBitMapByUrl: 通过URL地址获取Bitmap对

智能机器人“小昆”的实现(二)获取服务器数据工具类的编写及测试

没有取得图灵机器人认证的朋友可以看上一篇,点击下面的地址即可: http://www.cnblogs.com/fuly550871915/p/4852148.html 已经取得认证的朋友,可以继续往下做了.下面就开始我们的实际代码编写.在这篇文章中,我们要实现通过调用图灵机器人API获取返回的数据的功能.而且搭建相应的测试环境,看看我们这个功能实现的到底正确不正确. 一.获得服务器返回数据的工具类的实现 主要是android中的简单的网络编程知识的运用.代码如下: 1 package com.f