分享

基于HttpURLConnection的android http请求封装

 Coder编程 2022-12-21 发布于北京

基于HttpURLConnection的android http请求封装

使用方法

new Thread(new Runnable(){
    @Override
    public void run() {
      //axiosGH(url,callback)//简写方式,默认为get请求
      //axiosGH.get(url,callback)
      //axiosGH.get(url,params,callback)
      //axiosGH.post(url,callback)
      //axiosGH.post(url,params,callback)
        axiosGH.post(serverUrl + "/user/login", params, new AxiosGH.Callback() {
            @Override
            public void onSuccess(String res) {
              //请求成功返回参数处理
                System.out.println(res);
            }
            @Override
            public void onFailed(String err) {
              //请求失败返回参数处理
                System.out.println(err);
            }
        });
    }
}).start();

代码片段

package com.guhun.server;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Map;

// 仿造axios书写的http请求——————GuHun
public class AxiosGH {
    private String requestMethod;
    private boolean useCaches;
    private String serverUrl;
    private int connectTimeout;
    private String encode;
    // 初始化实例
    public AxiosGH(){
        init();
    }
    // 默认为get请求(地址,回调函数)
    public AxiosGH(String url,Callback callback){
        init();
        serverUrl = url;
        submitPostData(null,callback);
    }
    // get请求(地址,参数,回调函数)
    public void get(String url,Callback callback){
        serverUrl = url;
        submitPostData(null,callback);
    }
    // get请求(地址,参数,回调函数)
    public void get(String url,Map<String,String> params,Callback callback){
        serverUrl = url;
        submitPostData(params,callback);
    }
    // post请求(地址,回调函数)
    public void post(String url,Callback callback){
        requestMethod = "POST";
        serverUrl = url;
        submitPostData(null,callback);
    }
    // post请求(地址,参数,回调函数)
    public void post(String url,Map<String,String> params,Callback callback){
        requestMethod = "POST";
        serverUrl = url;
        submitPostData(params,callback);
    }
    // 初始化参数
    private void init(){
        requestMethod = "GET";
        useCaches = false;
        connectTimeout = 3000;
        encode="utf-8";
    }

    // 博客园-依旧淡然
    //HttpUtils.submitPostData(params, "utf-8")
    private void submitPostData(Map<String, String> params,Callback callback){
        String data = null;
        if (params!=null) {
             data = getRequestData(params, encode).toString();
        }
        try {
            if(requestMethod.equals("GET") && data != null){
                serverUrl += '?'+data;
            }
            URL url = new URL(serverUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod(requestMethod);//方式
            connection.setConnectTimeout(connectTimeout);//超时
            if(requestMethod.equals("POST")){
                connection.setDoInput(true);//向服务器输入
                connection.setDoOutput(true);//向服务器输出
                connection.setUseCaches(useCaches);//缓存
                //设置请求体的类型是文本类型
                connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                //设置请求体的长度
                connection.setRequestProperty("Content-Length", String.valueOf(data.getBytes().length));
                //获得输出流,向服务器写入数据
                OutputStream outputStream = connection.getOutputStream();
                outputStream.write(data.getBytes());
            }
            int response = connection.getResponseCode();            //获得服务器的响应码
            if(response == HttpURLConnection.HTTP_OK) {
                InputStream inptStream = connection.getInputStream();
                callback.onSuccess(dealResponseResult(inptStream));                     //处理服务器的响应结果
            }else {
                callback.onFailed("Error: response is" + response);
            }
        } catch (Exception e) {
            e.printStackTrace();
            callback.onFailed(e.toString());
        }
    }
    // 博客园-依旧淡然
    public static StringBuffer getRequestData(Map<String, String> params, String encode) {
        StringBuffer stringBuffer = new StringBuffer();        //存储封装好的请求体信息
        try {
            for(Map.Entry<String, String> entry : params.entrySet()) {
                stringBuffer.append(entry.getKey())
                        .append("=")
                        .append(URLEncoder.encode(entry.getValue(), encode))
                        .append("&");
            }
            stringBuffer.deleteCharAt(stringBuffer.length() - 1);    //删除最后的一个"&"
        } catch (Exception e) {
            e.printStackTrace();
        }
        return stringBuffer;
    }
    // 博客园-依旧淡然
    public static String dealResponseResult(InputStream inputStream) {
        String resultData = null;      //存储处理结果
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        byte[] data = new byte[1024];
        int len = 0;
        try {
            while((len = inputStream.read(data)) != -1) {
                byteArrayOutputStream.write(data, 0, len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        resultData = new String(byteArrayOutputStream.toByteArray());
        return resultData;
    }
    // 回调函数
    public interface Callback{
        void onSuccess(String res);
        void onFailed(String err);
    }

    // 请求方式
    public void setRequestMethod(String requestMethod) {
        this.requestMethod = requestMethod;
    }
    // 使用缓存
    public void setUseCaches(boolean useCaches) {
        this.useCaches = useCaches;
    }
    // 请求地址
    public void setServerUrl(String serverUrl) {
        this.serverUrl = serverUrl;
    }
    // 请求参数
    public void setConnectTimeout(int connectTimeout) {
        this.connectTimeout = connectTimeout;
    }
    // 编码方式
    public void setEncode(String encode) {
        this.encode = encode;
    }
}

作者:咕魂

时间:2021年3月9日09:47:14

get请求我没测试,之后用到有问题会更新

参考代码:Android学习笔记46:使用Post方式提交数据

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多