网络HTTP

news2025/3/9 12:02:51

HTTP Network Request Library

A Retrofit-based HTTP network request encapsulation library that provides simple and easy-to-use API interfaces with complete network request functionality.
基于Retrofit的HTTP网络请求封装库,提供简单易用的API接口和完整的网络请求功能。

Features

功能特点

  • Built on Retrofit2 and OkHttp
  • 基于Retrofit2和OkHttp构建
  • Support for common HTTP request methods (GET, POST, PUT, DELETE, etc.)
  • 支持常见的HTTP请求方法(GET、POST、PUT、DELETE等)
  • Unified request and response handling
  • 统一的请求和响应处理
  • Flexible request configuration
  • 灵活的请求配置
  • Custom request headers
  • 自定义请求头
  • Log interception and printing
  • 日志拦截和打印
  • Thread-safe singleton implementation
  • 线程安全的单例实现

Integration

集成方式

Gradle

dependencies {
    implementation 'io.github.vance0901:http:1.0.0'
}

加入网络权限 Add network permissions

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

Usage

使用方法

1. Initialization

1. 初始化

Initialize in the Application class:
在Application类中初始化:

HttpConfig config = new HttpConfig.Builder()
        .baseUrl("https://api.example.com/")
        .connectTimeout(10000)
        .readTimeout(10000)
        .writeTimeout(10000)
        .debug(BuildConfig.DEBUG)
        .logLevel(BuildConfig.DEBUG ? 
            HttpLoggingInterceptor.Level.BODY : 
            HttpLoggingInterceptor.Level.NONE)
        .build();
        
HttpManager.init(config);

2. Define API Interfaces

2. 定义API接口

public interface ApiService {
    // GET request example
    // GET请求示例
    @GET("users/{id}")
    Call<BaseResponse<UserInfo>> getUserInfo(@Path("id") long id);
    
    // GET request with query parameters
    // 带查询参数的GET请求
    @GET("users")
    Call<BaseResponse<List<UserInfo>>> getUserList(@Query("page") int page, @Query("size") int size);
    
    // POST request example - form submission
    // POST请求示例 - 表单提交
    @FormUrlEncoded
    @POST("users/login")
    Call<BaseResponse<LoginResponse>> login(
        @Field("username") String username,
        @Field("password") String password
    );
    
    // POST request example - JSON submission
    // POST请求示例 - JSON提交
    @POST("users/create")
    Call<BaseResponse<UserInfo>> createUser(@Body UserInfo userInfo);
    
    // PUT request example
    // PUT请求示例
    @PUT("users/{id}")
    Call<BaseResponse<UserInfo>> updateUser(
        @Path("id") long id, 
        @Body UserInfo userInfo
    );
    
    // DELETE request example
    // DELETE请求示例
    @DELETE("users/{id}")
    Call<BaseResponse<Void>> deleteUser(@Path("id") long id);
    
    // DELETE request with body
    // 带请求体的DELETE请求
    @HTTP(method = "DELETE", path = "users", hasBody = true)
    Call<BaseResponse<Void>> batchDeleteUsers(@Body List<Long> userIds);
}

3. Create API Service Class

3. 创建API服务类

public class UserService extends BaseApiService<ApiService> {
    private static volatile UserService instance;
    
    private UserService() {
        super();
    }
    
    public static UserService getInstance() {
        if (instance == null) {
            synchronized (UserService.class) {
                if (instance == null) {
                    instance = new UserService();
                }
            }
        }
        return instance;
    }
    
    @Override
    protected Class<ApiService> getApiServiceClass() {
        return ApiService.class;
    }
    
    // GET request example
    // GET请求示例
    public void getUserInfo(long userId, RequestCallback<UserInfo> callback) {
        executeRequest(apiService.getUserInfo(userId), callback);
    }
    
    // GET request with parameters example
    // 带参数的GET请求示例
    public void getUserList(int page, int size, RequestCallback<List<UserInfo>> callback) {
        executeRequest(apiService.getUserList(page, size), callback);
    }
    
    // POST request example
    // POST请求示例
    public void login(String username, String password, RequestCallback<LoginResponse> callback) {
        executeRequest(apiService.login(username, password), callback);
    }
    
    // POST request with JSON example
    // 带JSON的POST请求示例
    public void createUser(UserInfo userInfo, RequestCallback<UserInfo> callback) {
        executeRequest(apiService.createUser(userInfo), callback);
    }
    
    // PUT request example
    // PUT请求示例
    public void updateUser(long userId, UserInfo userInfo, RequestCallback<UserInfo> callback) {
        executeRequest(apiService.updateUser(userId, userInfo), callback);
    }
    
    // DELETE request example
    // DELETE请求示例
    public void deleteUser(long userId, RequestCallback<Void> callback) {
        executeRequest(apiService.deleteUser(userId), callback);
    }
    
    // DELETE request with body example
    // 带请求体的DELETE请求示例
    public void batchDeleteUsers(List<Long> userIds, RequestCallback<Void> callback) {
        executeRequest(apiService.batchDeleteUsers(userIds), callback);
    }
}

4. Make Network Requests

4. 发起网络请求

4.1 POST Request Example
4.1 POST请求示例
UserService.getInstance().login("username", "password", new RequestCallback<LoginResponse>() {
    @Override
    public void onStart() {
        // Show loading state
        // 显示加载状态
    }
    
    @Override
    public void onSuccess(LoginResponse data) {
        // Handle successful response
        // 处理成功响应
    }
    
    @Override
    public void onError(int code, String message) {
        // Handle error response
        // 处理错误响应
    }
    
    @Override
    public void onComplete() {
        // Request completed
        // 请求完成
    }
});
4.2 GET Request Example
4.2 GET请求示例
UserService.getInstance().getUserInfo(123, new RequestCallback<UserInfo>() {
    @Override
    public void onStart() {
        // Show loading state
        // 显示加载状态
    }
    
    @Override
    public void onSuccess(UserInfo data) {
        // Handle user information
        // 处理用户信息
        String username = data.getUsername();
        String email = data.getEmail();
    }
    
    @Override
    public void onError(int code, String message) {
        // Handle errors, e.g., user not found
        // 处理错误,例如用户未找到
    }
    
    @Override
    public void onComplete() {
        // Request completed
        // 请求完成
    }
});
4.3 PUT Request Example
4.3 PUT请求示例
// Create user information to update
// 创建要更新的用户信息
UserInfo userInfo = new UserInfo();
userInfo.setUsername("newUsername");
userInfo.setEmail("new.email@example.com");

UserService.getInstance().updateUser(123, userInfo, new RequestCallback<UserInfo>() {
    @Override
    public void onStart() {
        // Show updating state
        // 显示更新状态
    }
    
    @Override
    public void onSuccess(UserInfo data) {
        // Handle updated user information
        // 处理更新后的用户信息
    }
    
    @Override
    public void onError(int code, String message) {
        // Handle update failure
        // 处理更新失败
    }
    
    @Override
    public void onComplete() {
        // Update request completed
        // 更新请求完成
    }
});
4.4 DELETE Request Example
4.4 DELETE请求示例
UserService.getInstance().deleteUser(123, new RequestCallback<Void>() {
    @Override
    public void onStart() {
        // Show deleting state
        // 显示删除状态
    }
    
    @Override
    public void onSuccess(Void data) {
        // Handle successful deletion
        // 处理成功删除
    }
    
    @Override
    public void onError(int code, String message) {
        // Handle deletion failure
        // 处理删除失败
    }
    
    @Override
    public void onComplete() {
        // Deletion request completed
        // 删除请求完成
    }
});

5. Managing Request Headers

5. 管理请求头

5.1 Setting Global Authentication Token
5.1 设置全局认证令牌
// Set a global authentication token that will be used for all requests
// 设置一个全局认证令牌,用于所有请求
HttpManager.getInstance().setGlobalToken("your-auth-token-here");
5.2 Adding Custom Headers
5.2 添加自定义请求头
// Add a single custom header
// 添加单个自定义请求头
HttpManager.getInstance().addGlobalHeader("Custom-Header", "Header-Value");

// Add multiple headers at once
// 一次添加多个请求头
Map<String, String> headers = new HashMap<>();
headers.put("X-API-Key", "api-key-value");
headers.put("Accept-Language", "en-US");
HttpManager.getInstance().addGlobalHeaders(headers);
5.3 Removing Headers
5.3 移除请求头
// Remove a specific header
// 移除特定请求头
HttpManager.getInstance().removeGlobalHeader("Custom-Header");

// Clear all global headers
// 清除所有全局请求头
HttpManager.getInstance().clearGlobalHeaders();
5.4 Example: Managing Authentication Token After Login
5.4 示例:登录后管理认证令牌
UserService.getInstance().login("username", "password", new RequestCallback<LoginResponse>() {
    @Override
    public void onStart() {
        // Show loading state
        // 显示加载状态
    }
    
    @Override
    public void onSuccess(LoginResponse data) {
        // After successful login, set the authentication token
        // 登录成功后,设置认证令牌
        if (data != null && data.getToken() != null) {
            HttpManager.getInstance().setGlobalToken(data.getToken());
        }
        // Handle other login response data
        // 处理其他登录响应数据
    }
    
    @Override
    public void onError(int code, String message) {
        // Handle login failure
        // 处理登录失败
    }
    
    @Override
    public void onComplete() {
        // Login request completed
        // 登录请求完成
    }
});

Design Patterns

设计模式

This library uses multiple design patterns:
此库使用多种设计模式:

  • Singleton Pattern: HttpManager
  • 单例模式HttpManager
  • Builder Pattern: HttpConfig.Builder
  • 构建者模式HttpConfig.Builder
  • Factory Pattern: HttpManager.createApi()
  • 工厂模式HttpManager.createApi()
  • Observer Pattern: RequestCallback
  • 观察者模式RequestCallback
  • Template Method Pattern: BaseApiService
  • 模板方法模式BaseApiService
  • Strategy Pattern: Different request strategies through different API interfaces
  • 策略模式:通过不同的API接口实现不同的请求策略
  • Proxy Pattern: HeaderInterceptor
  • 代理模式HeaderInterceptor

Project Structure

项目结构

com.vance0901.zhuhai.network.http
├── HttpManager.java               // HTTP Manager
│                                  // HTTP管理器
│                                  
├── callback                       // Callback interfaces
│                                  // 回调接口
│   └── RequestCallback.java       // Request callback interface
│                                  // 请求回调接口
├── config                         // Configuration classes
│                                  // 配置类
│   └── HttpConfig.java            // HTTP configuration class
│                                  // HTTP配置类
├── interceptor                    // Interceptors
│                                  // 拦截器
│   └── HeaderInterceptor.java     // Request header interceptor
│                                  // 请求头拦截器
├── model                          // Data models
│                                  // 数据模型
│   └── BaseResponse.java          // Base response class
│                                  // 基础响应类
└── service                        // Service classes
                                   // 服务类
    └── BaseApiService.java        // Base API service class
                                   // 基础API服务类
JAVA开发者或其他开发人员使用请参考:
https://central.sonatype.com/artifact/io.github.vance0901/http/overview
For JAVA developers or other developers to use, please refer to:
https://central.sonatype.com/artifact/io.github.vance0901/http/overview
更多详细用法请查看demo。 For more detailed usage, please refer to the demo.

代码链接:

https://github.com/vance0901/ZhuHaiHttp

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2312123.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt常用控件之表格QTableWidget

表格QTableWidget QTableWidget 是一个表格控件&#xff0c;行和列交汇形成的每个单元格&#xff0c;是一个 QTableWidgetItem 对象。 1. QTableWidget属性 QTableWidget 的属性只有两个&#xff1a; 属性说明rowCount当前行的个数。columnCount当前列的个数。 2. QTableW…

FFmpeg入门:最简单的音视频播放器

FFmpeg入门&#xff1a;最简单的音视频播放器 前两章&#xff0c;我们已经了解了分别如何构建一个简单和音频播放器和视频播放器。 FFmpeg入门&#xff1a;最简单的音频播放器 FFmpeg入门&#xff1a;最简单的视频播放器 本章我们将结合上述两章的知识&#xff0c;看看如何融…

【Python爬虫】爬取公共交通路网数据

程序来自于Github&#xff0c;以下这篇博客作为完整的学习记录&#xff0c;也callback上一篇爬取公共交通站点的博文。 Bardbo/get_bus_lines_and_stations_data_from_gaode: 这个项目是基于高德开放平台和公交网获取公交线路及站点数据&#xff0c;并生成shp文件&#xff0c;…

009---基于Verilog HDL的单比特信号边沿检测

文章目录 摘要一、边沿检测二、时序逻辑实现2.1 rtl2.2 tb 三、组合逻辑实现3.1 rtl3.2 tb 摘要 文章为学习记录。采用时序逻辑和组合逻辑实现边沿检测的核心逻辑。组合逻辑实现的上升沿和下降沿的脉冲比时序逻辑实现的上升沿和下降沿的脉冲提前一拍。 一、边沿检测 边沿检测…

Trae IDE新建C#工程

目录 1 结论 2 项目结构 3 项目代码 1 结论 新建C#工程来说&#xff0c;Trae的Chat比DeepSeek的Coder好用。 2 项目结构 MyWinFormsApp/ │ ├── Program.cs ├── Form1.cs ├── Form1.Designer.cs ├── MyResources/ │ └── MyResources.resx └── MyWin…

三、0-1搭建springboot+vue3前后端分离-idea新建springboot项目

一、ideal新建项目1 ideal新建项目2 至此父项目就创建好了&#xff0c;下面创建多模块&#xff1a; 填好之后点击create 不删了&#xff0c;直接改包名&#xff0c;看自己喜欢 修改包名和启动类名&#xff1a; 打开ServiceApplication启动类&#xff0c;修改如下&#xff1a; …

Unity光照之Halo组件

简介 Halo 组件 是一种用于在游戏中创建光晕效果的工具&#xff0c;主要用于模拟光源周围的发光区域&#xff08;如太阳、灯泡等&#xff09;或物体表面的光线反射扩散效果。 核心功能 1.光晕生成 Halo 组件会在光源或物体的周围生成一个圆形光晕&#xff0c;模拟光线在空气…

递归专题刷题

文章目录 递归合并两个有序链表题解代码 反转链表题解代码 两两交换链表中的节点题解代码 Pow(x, n)&#xff08;快速幂&#xff09;题解代码汉诺塔题解代码 总结 递归 1. 重复的子问题宏观看待递归问题 合并两个有序链表 题目链接 题解 1. 重复的子问题 -> 函数头的设…

Android Studio 一直 Loading devices

https://stackoverflow.com/questions/71013971/android-studio-stuck-on-loading-devices

摄相机标定的基本原理

【相机标定的基本原理与经验分享】https://www.bilibili.com/video/BV1eE411c7kr?vd_source7c2b5de7032bf3907543a7675013ce3a 相机模型&#xff1a; 定义&#xff1a; 内参&#xff1a;就像相机的“眼睛”。它描述了相机内部的特性&#xff0c;比如焦距&#xff08;镜头的放…

CentOS 7 安装 Redis6.2.6

获取资源、下载安装 Redis6.2.6 安装Redis6.2.6 上传到服务器或直接下载&#xff08;wget http://download.redis.io/releases/redis-6.2.6.tar.gz&#xff09;、再解压安装 tar -zxvf redis-6.2.6.tar.gz 进入redis解压目录 cd redis-6.2.6先编译 make再执行安装 make PREFI…

3D数字化:家居行业转型升级的关键驱动力

在科技日新月异的今天&#xff0c;家居行业正经历着一场前所未有的变革。从传统的线下实体店铺到线上电商平台的兴起&#xff0c;再到如今3D数字化营销的广泛应用&#xff0c;消费者的购物体验正在发生翻天覆地的变化。3D数字化营销不仅让购物变得更加智能和便捷&#xff0c;还…

无人机推流/RTMP视频推拉流:EasyDSS无法卸载软件的原因及解决方法

视频推拉流/直播点播EasyDSS平台支持音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务&#xff0c;在应用场景中可实现视频直播、点播、转码、管理、录像、检索、时移回看等。此外&#xff0c;平台还支持用户自行上传视频文件&#xff0c;也可将上传的点播…

Logisim实验--计组

每个实验会先讲一下原理再给出答案。 实验一&#xff1a;7段数码管驱动电路设计 实验目的 (1)帮助学生理解真值表方式设计电路的原理&#xff1b; (2)能利用Logisim的真值表生成电路功能自动生成所需电路。 这里我们要看清每个引脚控制的是哪个灯亮&#xff0c;注意看它的线…

【Linux】软硬链接 | 动静态链接(三)

目录 前言&#xff1a; 一、软硬链接 1.软链接 2.硬链接 3.硬链接数 4.软硬链接的区别 5.使用unlink删除链接的文件 6.目录文件链接数( . 和 .. ) 二、静态库的制作和使用 1.制作静态库 2.使用静态库 2.1方法一 2.2方法二 2.3方法三 三、动态库的制作和使用 1.…

数据结构(回顾)

数据结构&#xff08;回顾&#xff09; 回顾 不同点顺序表链表存储空间上物理上一定连续逻辑上连续&#xff0c;物理上不一定连续随机访问支持&#xff0c;时间复杂度O(1)不支持&#xff0c;时间复杂度O(N)任意位置插入或者删除元素可能需要挪动元素&#xff0c;效率低&#…

达梦数据库在Linux,信创云 安装,备份,还原

&#xff08;一&#xff09;系统环境检查 1操作系统&#xff1a;确认使用的是国产麒麟操作系统&#xff0c;检查系统版本是否兼容达梦数据库 V8。可以通过以下命令查看系统版本&#xff1a; cat /etc/os-release 2硬件资源&#xff1a;确保服务器具备足够的硬件资源&#xff0…

从0开始的操作系统手搓教程23:构建输入子系统——实现键盘驱动1——热身驱动

目录 所以&#xff0c;键盘是如何工作的 说一说我们的8042 输出缓冲区寄存器 状态寄存器 控制寄存器 动手&#xff01; 注册中断 简单整个键盘驱动 Reference ScanCode Table 我们下一步就是准备进一步完善我们系统的交互性。基于这个&#xff0c;我们想到的第一个可以…

01-简单几步!在Windows上用llama.cpp运行DeepSeek-R1模型

1.llama.cpp介绍 Llama.cpp 是一个开源的、轻量级的项目&#xff0c;旨在实现 Meta 推出的开源大语言模型 Llama 的推理&#xff08;inference&#xff09;。Llama 是 Meta 在 2023 年开源的一个 70B 参数的高质量大语言模型&#xff0c;而 llama.cpp 是一个用 C 实现的轻量化…

HarmonyOS Next 属性动画和转场动画

HarmonyOS Next 属性动画和转场动画 在鸿蒙应用开发中&#xff0c;动画是提升用户体验的关键要素。通过巧妙运用动画&#xff0c;我们能让应用界面更加生动、交互更加流畅&#xff0c;从而吸引用户的注意力并增强其使用粘性。鸿蒙系统为开发者提供了丰富且强大的动画开发能力&…