前言
Android 网络请求框架,简单易用。
GitHub 地址:EasyHttp
Gradle 集成
- 如果你的项目 Gradle 配置是在 7.0 以下,需要在 build.gradle 文件中加入
allprojects {
repositories {
// JitPack 远程仓库:https://jitpack.io
maven { url 'https://jitpack.io' }
}
}
- 如果你的 Gradle 配置是 7.0 及以上,则需要在 settings.gradle 文件中加入
dependencyResolutionManagement {
repositories {
// JitPack 远程仓库:https://jitpack.io
maven { url 'https://jitpack.io' }
}
}
- 在项目 app 模块下的 build.gradle 文件中加入远程依赖
// 网络请求框架:https://github.com/getActivity/EasyHttp
implementation 'com.github.getActivity:EasyHttp:11.2'
// OkHttp 框架:https://github.com/square/okhttp
// noinspection GradleDependency
implementation 'com.squareup.okhttp3:okhttp:3.12.13'
配置权限
<!-- 联网权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 访问网络状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 外部存储读写权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
服务器配置
public class ReleaseServer implements IRequestServer {
@NonNull
@Override
public String getHost() {
return "https://www.wanandroid.com/";
}
}
初始化
public class MyAPP extends Application {
@Override
public void onCreate() {
super.onCreate();
ToastUtils.init(this);
// MMKV.initialize(this);
// 网络请求框架初始化
IRequestServer server;
if (BuildConfig.DEBUG) {
server = new TestServer();
} else {
server = new ReleaseServer();
}
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.build();
EasyConfig.with(okHttpClient)
// 是否打印日志
//.setLogEnabled(BuildConfig.DEBUG)
// 设置服务器配置
.setServer(server)
// 设置请求处理策略
.setHandler(new RequestHandler(this))
// 设置请求参数拦截器
.setInterceptor(new IRequestInterceptor() {
@Override
public void interceptArguments(@NonNull HttpRequest<?> httpRequest,
@NonNull HttpParams params,
@NonNull HttpHeaders headers) {
headers.put("timestamp", String.valueOf(System.currentTimeMillis()));
}
})
// 设置请求重试次数
.setRetryCount(1)
// 设置请求重试时间
.setRetryTime(2000)
// 添加全局请求参数
.addParam("token", "6666666")
// 添加全局请求头
//.addHeader("date", "20191030")
.into();
}
}
配置接口
public final class SearchAuthorApi implements IRequestApi {
@NonNull
@Override
public String getApi() {
return "wxarticle/chapters/json";
}
/** 公众号 id */
private int id;
public SearchAuthorApi setId(int id) {
this.id = id;
return this;
}
public final static class Bean {
private int courseId;
private int id;
private String name;
private int order;
private int parentChapterId;
private boolean userControlSetTop;
private int visible;
public int getCourseId() {
return courseId;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getOrder() {
return order;
}
public int getParentChapterId() {
return parentChapterId;
}
public boolean isUserControlSetTop() {
return userControlSetTop;
}
public int getVisible() {
return visible;
}
}
}
Get 请求
EasyHttp.get(this)
.api(new SearchAuthorApi()
.setId(190000))
.request(new HttpCallback<HttpData<List<SearchAuthorApi.Bean>>>(this) {
@Override
public void onSucceed(HttpData<List<SearchAuthorApi.Bean>> result) {
ToastUtils.show("Get 请求成功,请看日志");
}
});
Post 请求
EasyHttp.post(this)
.api(new SearchBlogsApi()
.setKeyword("搬砖不再有"))
.request(new HttpCallback<HttpData<SearchBlogsApi.Bean>>(this) {
@Override
public void onSucceed(HttpData<SearchBlogsApi.Bean> result) {
ToastUtils.show("Post 请求成功,请看日志");
}
});
上传文件
// 如果是放到外部存储的应用专属目录则不需要适配分区存储特性
File file = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), "我是测试专用的图片.png");
if (!file.exists()) {
// 生成图片到本地
try {
Drawable drawable = ContextCompat.getDrawable(this, R.drawable.bg_material);
OutputStream outputStream = EasyUtils.openFileOutputStream(file);
if (((BitmapDrawable) drawable).getBitmap().compress(Bitmap.CompressFormat.PNG, 100, outputStream)) {
outputStream.flush();
}
// 通知系统多媒体扫描该文件,否则会导致拍摄出来的图片或者视频没有及时显示到相册中,而需要通过重启手机才能看到
MediaScannerConnection.scanFile(this, new String[]{file.getPath()}, null, null);
} catch (IOException e) {
e.printStackTrace();
}
}
EasyHttp.post(this)
.api(new UpdateImageApi(file))
.request(new OnUpdateListener<Void>() {
@Override
public void onStart(Call call) {
mProgressBar.setProgress(0);
mProgressBar.setVisibility(View.VISIBLE);
}
@Override
public void onProgress(int progress) {
mProgressBar.setProgress(progress);
}
@Override
public void onSucceed(Void result) {
ToastUtils.show("上传成功");
}
@Override
public void onFail(Exception e) {
ToastUtils.show("上传失败");
}
@Override
public void onEnd(Call call) {
mProgressBar.setVisibility(View.GONE);
}
});
项目地址:传送门