NoHttp

2025-05-08

前端

在创作家的事业中,每一步都要深思而后行,而不是盲目瞎碰。 —— 米丘林

https://github.com/yanzhenjie/NoHttp

NoHttp:为 Android 提供高效 HTTP 协议支持的框架

在 Android 应用开发中,网络请求是不可或缺的一部分。虽然 Android 提供了基本的网络请求工具(如 HttpURLConnectionOkHttp),但它们的使用复杂性较高。NoHttp 是一个轻量级的 HTTP 框架,旨在简化网络请求的实现,同时提供丰富的功能和灵活性。


什么是 NoHttp?

NoHttp 是一个为 Android 平台设计的网络请求框架,支持标准的 HTTP 协议,并提供多种缓存模式。它的底层架构允许动态切换不同的网络请求实现,如 OkHttpHttpURLConnection,从而为开发者提供了高效且灵活的网络请求解决方案。

核心特点:

  1. 支持多种缓存模式:包括不缓存、仅缓存、网络优先等模式。
  2. 动态底层切换:可以在 OkHttpHttpURLConnection 之间自由切换。
  3. 轻量级:专为 Android 设计,性能优异,占用资源少。
  4. 支持 RESTful 请求:便捷地发送 GET、POST、PUT、DELETE 等请求。
  5. 易于集成和使用:通过简单的 API 提供强大的功能。

使用场景

NoHttp 适用于以下场景:

  1. 标准 HTTP 请求
    如 RESTful API 的 GET、POST、PUT 和 DELETE 请求。

  2. 灵活的缓存策略
    在网络不稳定的情况下,使用缓存来提升用户体验。

  3. 动态切换底层实现
    根据需求选择最适合的网络请求工具,如 OkHttpHttpURLConnection

  4. 轻量级应用
    对于不需要重型网络库的项目,NoHttp 是一个高效的选择。


快速上手指南

以下是使用 NoHttp 的基本步骤:

1. 添加依赖

在项目的 build.gradle 文件中添加以下依赖:

1
implementation 'com.yanzhenjie.nohttp:nohttp:1.1.9'

2. 初始化

在应用程序启动时初始化 NoHttp:

1
2
3
4
5
6
@Override
public void onCreate() {
super.onCreate();
// 初始化 NoHttp
NoHttp.initialize(this);
}

3. 发送网络请求

以下是一个 GET 请求的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Request<String> request = NoHttp.createStringRequest("https://api.example.com/data", RequestMethod.GET);

RequestQueue requestQueue = NoHttp.newRequestQueue();

requestQueue.add(0, request, new OnResponseListener<String>() {
@Override
public void onStart(int what) {
// 请求开始
}

@Override
public void onSucceed(int what, Response<String> response) {
// 请求成功
String result = response.get();
}

@Override
public void onFailed(int what, Response<String> response) {
// 请求失败
}

@Override
public void onFinish(int what) {
// 请求结束
}
});

4. 使用缓存

NoHttp 提供了多种缓存模式:

1
request.setCacheMode(CacheMode.REQUEST_NETWORK_FAILED_READ_CACHE);

高级功能

1. 文件上传与下载

支持文件上传和文件下载:

1
2
3
4
5
6
// 文件上传
Request<String> uploadRequest = NoHttp.createStringRequest("https://api.example.com/upload", RequestMethod.POST);
uploadRequest.addFile("file", new File("/path/to/file"));

// 文件下载
DownloadRequest downloadRequest = NoHttp.createDownloadRequest("https://api.example.com/file", "/path/to/save", "filename.ext");

2. 自定义请求头

可以轻松设置自定义请求头:

1
request.addHeader("Authorization", "Bearer token");

3. 动态底层切换

可以在 OkHttpHttpURLConnection 之间动态切换:

1
NoHttp.setDefaultConnection(new OkHttpConnection());

社区与支持

NoHttp 是一个活跃的开源项目,目前在 GitHub 上拥有 3703 个星标852 个分支,得到了广泛的社区支持。你可以通过以下方式获取更多帮助:

  • 访问项目主页GitHub 仓库
  • 提交 Issue:报告 Bug 或提出功能建议。
  • 贡献代码:通过 Pull Request 为项目做出贡献。

适用项目

NoHttp 适合各种类型的 Android 项目,特别是在以下场景中表现出色:

  1. 轻量级网络请求:对于不需要重型网络库的项目。
  2. 复杂的缓存需求:需要灵活的缓存策略以提升用户体验。
  3. 高效的 RESTful API 请求:快速实现标准的 HTTP 请求。

结语

NoHttp 是一个功能丰富且轻量化的 Android HTTP 框架,它通过简化网络请求的实现,让开发者能够更专注于业务逻辑。如果你正在寻找一个高效、灵活的网络请求解决方案,不妨试试 NoHttp!它将为你的 Android 开发带来更多便利。