Android 封装 Http 请求工具

Android网络(二)原生的HTTP请求工具--HttpURLConnection的用法 作为 Android 系统提供的原生 HTTP 请求工具,尽管功能相对简单,但它仍然具备处理基本网络请求的能力。其轻量级和系统内置的特性,使得在一些简单或对性能要求较高的场景中仍然被广泛使用。然而,随着现代应用对网络请求的复杂性和高效性的要求越来越高,的局限性也逐渐显现。比如,处理复杂的网络请求、增强的连接池管理、更好的性能优化等需求,往往需要更强大的工具来应对,OkHttp作为一个开源的 HTTP 客户端,提供了许多所不具备的高级特性。 阅读详情

Android 封装 Http 请求工具

工具类

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.util.Map;

/**
 * http 请求工具
 *
 * @author Tellsea
 * @date 2021-11-24
 */
public class HttpUtils {

    /**
     * get请求封装
     *
     * @param url
     * @param params
     * @param encode
     * @param listener
     */
    public static void getRequest(String url, Map<String, String> params, String encode, OnResponseListener listener) {
        StringBuffer sb = new StringBuffer(url);
        sb.append("?");
        if (params != null && !params.isEmpty()) {
            //增强for遍历循环添加拼接请求内容
            for (Map.Entry<String, String> entry : params.entrySet()) {
                sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
            }
            sb.deleteCharAt(sb.length() - 1);
            if (listener != null) {
                try {
                    URL path = new URL(sb.toString());
                    if (path != null) {
                        HttpURLConnection con = (HttpURLConnection) path.openConnection();
                        //设置请求方式
                        con.setRequestMethod("GET");
                        //链接超时3秒
                        con.setConnectTimeout(3000);
                        con.setDoOutput(true);
                        con.setDoInput(true);
                        OutputStream os = con.getOutputStream();
                        os.write(sb.toString().getBytes(encode));
                        os.close();
                        //应答码200表示请求成功
                        if (con.getResponseCode() == 200) {
                            onSuccess(encode, listener, con);
                        }
                    }
                } catch (Exception error) {
                    error.printStackTrace();
                    onError(listener, error);
                }
            }
        }
    }

    /**
     * POST请求
     *
     * @param url
     * @param params
     * @param encode
     * @param listener
     */
    public static void postRequest(String url, Map<String, String> params, String encode, OnResponseListener listener) {
        StringBuffer sb = new StringBuffer();
        if (params != null && !params.isEmpty()) {
            for (Map.Entry<String, String> entry : params.entrySet()) {
                sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
            }
            sb.deleteCharAt(sb.length() - 1);
        }
        if (listener != null) {
            try {
                URL path = new URL(url);
                if (path != null) {
                    HttpURLConnection con = (HttpURLConnection) path.openConnection();
                    con.setRequestMethod("POST");   //设置请求方法POST
                    con.setConnectTimeout(3000);
                    con.setDoOutput(true);
                    con.setDoInput(true);
                    byte[] bytes = sb.toString().getBytes();
                    OutputStream outputStream = con.getOutputStream();
                    outputStream.write(bytes);
                    outputStream.close();
                    if (con.getResponseCode() == 200) {
                        onSuccess(encode, listener, con);
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
                onError(listener, e);
            }
        }
    }

    private static void onError(OnResponseListener listener, Exception onError) {
        listener.onError(onError.toString());
    }

    private static void onSuccess(String encode, OnResponseListener listener, HttpURLConnection con) throws IOException {
        InputStream inputStream = con.getInputStream();
        //创建内存输出流
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        int len = 0;
        byte[] bytes = new byte[1024];
        if (inputStream != null) {
            while ((len = inputStream.read(bytes)) != -1) {
                baos.write(bytes, 0, len);
            }
            String str = new String(baos.toByteArray(), encode);
            listener.onSuccess(str);
        }
    }
}
/**
 * 请求回调
 *
 * @author Tellsea
 * @date 2021-11-24
 */
public interface OnResponseListener {

    void onSuccess(String response);

    void onError(String error);
}

使用案例

Map<String, String> map = new HashMap<>();

map.put(“extract”, encrypt);

HttpUtils.getRequest(“http://tellsea.4kb.cn/arcFace/arcFace”, map, “utf-8”, new OnResponseListener() {

 @Override
 public void onSuccess(String response) {
     System.out.println(response);
     AjaxResult result = new Gson().fromJson(response, AjaxResult.class);
     if (IntegerUtils.eq(result.getCode(), 200)) {
         // 处理逻辑业务
     } else {
         // 识别失败
     }
 }
 @Override
 public void onError(String error) {
     System.out.println("请求失败:" + error);
 }

});

Android开发的更多学习资料可以扫码免费领取!

Android基础课程资料包

目录

img

第一章 UI

img

第一章 UI

更有更多资料,加微信免费领取

img

img

安卓开发:OKHTTP的封装代码--Httplib 1.0(适用于各类比赛) Httplibs是一个基于OkHttp的Android网络请求封装库。它简化了OkHttp的使用,提供了更加便捷、灵活的API接口,适用于各类Android开发比赛和项目。尤其是移动应用开发大赛,该库旨在帮助开发者更加高效地处理网络请求,减少重复代码,提高开发效率。 阅读详情

相关推荐

android HTTP接口测试软件

一个android HTTP接口测试小软件,可以GET和POST,参数可以动态添加删除,结果自动格式化json,里面也有GET图片的代码,但功能还没加上去。

Android Http 请求封装及使用

支持 GET、POST 请求。

w风雨无阻w的专栏 493

手机如何高效辅助林业调查

手机如何高效辅助林业调查 很多林业工作者将栅格类型的地形图处理后导入平板电脑,在林地使用平板电脑加载小班矢量图,辅助林业调查。但是,如果没有地形图底图,这种方法可能就有难度,而且最重要的是,大部分林地工作者没有能力配置平板电脑。大凡林业基层工作者在林地调查时,除调查记录本等部分纸质材料外,都必然携带手机和水杯,此外其他设备已经成为累赘,尤其是炎热的夏季在杂灌丛生的林地进行调查作业。因此,使用手机...

xu780820的博客 3078

android 的http封装

package okhttp; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.os.Handler; import android.os.Looper; import android.text.TextUtils;...

weixin_43492777的博客 543

滑模控制实战:用Python从零实现SMC算法(附完整代码)

本文通过Python实战,从零详解滑模控制(SMC)算法的核心原理与代码实现。文章聚焦于一阶系统,使用NumPy和Matplotlib逐步构建控制器,并针对SMC固有的抖振问题,详细讲解了边界层法的原理与实现,提供了完整的代码和参数调优指南,帮助读者直观理解并掌握这一鲁棒性极强的非线性控制方法。

weixin_29285605的博客 466

C语言——利用矩阵LU分解法求逆、行列式

本章介绍了LU分解法,以及如何利用LU分解法求逆、行列式,针对每个公式、原理、代码进行了详细介绍,希望可以给大家带来帮助。

王元笙 1万+

【Android】Android 封装 Http 请求工具

文章目录【Android】Android 封装 Http 请求工具工具类使用案例微信公众号 【Android】Android 封装 Http 请求工具 干货直接上代码 工具类 import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import jav

Tellsea 2058

ABtest描述统计功效

我们在面试数据分析时,常常会问到如何确定样本量的问题,会有一个指标:统计功效(power),或者是1-β 统计功效会影响实验的可信度,甚至会影响实验所需的样本量,要了解统计功效,首先要理解两类统计错误 假如我们做了一个AB实验,且两组用户的数据均值为μ1和μ2,我们会有两个初始假设: H0:两个实验组的数据没有差别(μ1=μ2),这个假设也叫“零假设”,也叫原假设 H1:两个实验组之间的数据存在差别(μ1≠μ2),这个假设也叫“非零假设”,也叫备择假设 定义两类错误: 实验本身没有效应,但我们觉

qq_38134556的博客 903

android http封装类,Android 封装http请求的工具类

import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.URLEncoder;import java.security.KeyStore;import java.util.Iterator;import java.util.List;import java.util.Map;import java...

weixin_42139302的博客 490

VLA、世界模型与端到端在智驾中的本质关系与工程落地

世界模型并非3D重建,而是对环境状态转移函数的可微分建模;VLA不是视觉+语言+动作的简单拼接,核心在于跨模态语义对齐。二者共同支撑具身智能系统实现从感知到行动的闭环推演,其技术价值体现在长尾场景泛化能力提升与决策延迟降低。在自动驾驶领域,真实量产方案均采用VLA架构作为多模态感知基础,嵌入轻量级世界模型以支持反事实轨迹推演,并通过WA硬件封装保障实时性,最终由端到端控制层完成像素到扭矩的语义贯通。这种混合架构已成L2+/L3智驾系统的工程共识。

weixin_34163553的博客 366

进芯AVP28335烧录避坑全记录:CCS、Uniflash、C2Prog、SDFlash四大工具配置详解

本文详细解析了进芯AVP28335芯片在烧录过程中遇到的常见问题及解决方案,涵盖CCS、Uniflash、C2Prog和SDFlash四大工具的配置要点。针对国产器件AVP28335的特殊需求,提供了从开发环境准备到烧录验证的全流程指南,帮助开发者高效完成程序烧录,避免常见陷阱。

weixin_30836759的博客 592

Android 封装http请求的工具类

import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URLEncoder; import java.security.KeyStore; import java.util.Iterator; import java.util.List; import java.util.Map; impo

云淡风轻的博客 2344

[DDR5] 模式寄存器 Mode Register MRR/MRW

模式寄存器用于定义各种操作模式。在初始化过程中,可以通过重新执行MRS命令来更改模式寄存器的内容。

串起点滴 1639

android开发http请求POST&GET封装工具

最近一直想着封装个网络请求框架,但是看到有很多博客有封装而且还不错,于是就想着封装一个安卓带的,以便自己以后使用. 一,请求成功和失败回调接口public interface OnResponseListner { void onSucess(String response); void onError(String error); } 二,post&get请求方法工具类 publi

WhatYouSeeMe的博客 6069

【ffmpeg+cuda实现硬编解码】

最近在搞一个项目,我需要向AI提供视频帧数,本来一开始摄像头是H.264的编码,我直接复制流推到AI层去推理,然后需要将事件回溯成30秒的视频截取。结果摄像头换成了HEVC编码,截取的视频不能在网页直接播放(需要JS实现调用硬解码)。一开始的方案是ffmpeg直接将HEVC转成H.264结果因为事务巨多CPU占用量过大,导致影响到了推理,因为本身选用的模型+杂七杂八的业务逻辑也要占用大量的CPU资源,所以经过研究把ffmpeg和nvcodec结合起来来平衡设备性能,算是解决了这个问题吧。这两个是前提条件,我

jiexijihe945的博客 7232

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

java安卓util工具类,Android_Android封装的http请求实用工具类,复制代码 代码如下:import java.io - phpStudy...

import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.URLEncoder;import java.security.KeyStore;import java.util.Iterator;import java.util.List;import java.util.Map;import java...

weixin_34891129的博客 150

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

android https 工具类,Android 封装http请求的工具类

importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.net.URLEncoder;importjava.security.KeyStore;importjava.util.Iterator;importjava.util.List;importjava.util.Map;importjava...

weixin_32466167的博客 314

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

上一篇: 一个普通程序员6年涨薪历程
下一篇: 阿里高级外包你待得住吗?
Agent学习路线
博客等级 码龄6年 1万+粉丝 1905原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值