Skip to content

Commit cd00f59

Browse files
committed
新增支持请求状态处理
新增支持请求重试机制 新增支持表单和Json提交
1 parent 28668d4 commit cd00f59

31 files changed

+545
-349
lines changed

EasyHttp.apk

-1.17 MB
Binary file not shown.

README.md

Lines changed: 41 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,16 @@
66

77
#### Gradle 集成
88

9+
android {
10+
// 支持 JDK 1.8
11+
compileOptions {
12+
targetCompatibility JavaVersion.VERSION_1_8
13+
sourceCompatibility JavaVersion.VERSION_1_8
14+
}
15+
}
16+
917
dependencies {
10-
implementation 'com.hjq:http:3.0'
18+
implementation 'com.hjq:http:5.0'
1119
implementation 'com.squareup.okhttp3:okhttp:3.12.1'
1220
implementation 'com.google.code.gson:gson:2.8.5'
1321
}
@@ -38,15 +46,21 @@
3846
public String getPath() {
3947
return "api/";
4048
}
49+
50+
@Override
51+
public BodyType getType() {
52+
// 参数以 Json 格式提交(默认是表单)
53+
return BodyType.JSON;
54+
}
4155
}
4256

4357
#### 初始化
4458

45-
> 需要配置请求处理,具体封装可以[点击此处参考](https://github.com/getActivity/EasyHttp/blob/master/app/src/main/java/com/hjq/http/demo/http/model/RequestHandler.java)
59+
> 需要配置请求结果处理,具体封装可以参考 [RequestHandler](https://github.com/getActivity/EasyHttp/blob/master/app/src/main/java/com/hjq/http/demo/http/model/RequestHandler.java)
4660
4761
EasyConfig.with(new OkHttpClient())
4862
// 是否打印日志
49-
.setLog(BuildConfig.DEBUG)
63+
.setLogEnabled(BuildConfig.DEBUG)
5064
// 设置服务器配置
5165
.setServer(server)
5266
// 设置请求处理策略
@@ -93,27 +107,28 @@
93107

94108
* @HttpRename:重新定义这个字段发送给后台的参数名称
95109

96-
* 可为这个类多实现一些接口
110+
* 可为这个类多实现一些配置接口
97111

98112
* implements IRequestHost:实现这个接口之后可以重新指定这个请求的主机地址
99113

100114
* implements IRequestPath:实现这个接口之后可以重新指定这个请求的接口路径
101115

116+
* implements IRequestType:实现这个接口之后可以重新指定这个请求的提交方式
117+
102118
#### 发起请求
103119

120+
> 需要配置请求状态及生命周期处理,具体封装可以参考 [BaseActivity](https://github.com/getActivity/EasyHttp/blob/master/app/src/main/java/com/hjq/http/demo/BaseActivity.java)
121+
104122
EasyHttp.post(this)
105123
.api(new LoginApi()
106124
.setUserName("Android 轮子哥")
107125
.setPassword("123456"))
108-
.request(new OnHttpListener<HttpData<LoginBean>>() {
126+
.request(new HttpCallback<HttpData<LoginBean>>(activity) {
109127

110128
@Override
111129
public void onSucceed(HttpData<LoginBean> data) {
112130
ToastUtils.show("登录成功");
113131
}
114-
115-
@Override
116-
public void onFail(Exception e) {}
117132
});
118133

119134
#### 下载文件
@@ -122,54 +137,45 @@
122137
123138
EasyHttp.download(this)
124139
.method(HttpMethod.GET)
125-
.file(new File(Environment.getExternalStorageDirectory(), "手机QQ.apk"))
126-
.url("https://qd.myapp.com/myapp/qqteam/AndroidQQ/mobileqq_android.apk")
127-
.md5("47CBDF2A2940B7773DD1B63CBCFD86E1")
128-
//.url("http://dldir1.qq.com/weixin/android/weixin708android1540.apk")
140+
.file(new File(Environment.getExternalStorageDirectory(), "微信.apk"))
141+
.url("http://dldir1.qq.com/weixin/android/weixin708android1540.apk")
142+
.md5("2E8BDD7686474A7BC4A51ADC3667CABF")
129143
.listener(new OnDownloadListener() {
130144

131145
@Override
132-
public void onDownloadStart(DownloadTask task) {
146+
public void onStart(Call call) {
133147
mProgressBar.setVisibility(View.VISIBLE);
134-
ToastUtils.show("下载开始:" + task.getFile().getName());
148+
ToastUtils.show("下载开始");
135149
}
136150

137151
@Override
138-
public void onDownloadProgress(DownloadTask task) {
139-
mProgressBar.setProgress(task.getProgress());
152+
public void onProgress(DownloadInfo info) {
153+
mProgressBar.setProgress(info.getDownloadProgress());
140154
}
141155

142156
@Override
143-
public void onDownloadComplete(DownloadTask task) {
144-
mProgressBar.setVisibility(View.GONE);
145-
ToastUtils.show("下载完成:" + task.getFile().getPath());
157+
public void onComplete(DownloadInfo info) {
158+
ToastUtils.show("下载完成:" + info.getFile().getPath());
159+
installApk(MainActivity.this, info.getFile());
146160
}
147161

148162
@Override
149-
public void onDownloadError(DownloadTask task, Exception e) {
150-
mProgressBar.setVisibility(View.GONE);
163+
public void onError(DownloadInfo info, Exception e) {
151164
ToastUtils.show("下载出错:" + e.getMessage());
152165
}
153166

154-
}).start();
155-
156-
#### 生命周期管理
157-
158-
> EasyHttp 默认不管理请求生命周期,需要在基类中进行取消与之关联的网络请求,这里只演示 BaseActivity,其他基类方式雷同。
167+
@Override
168+
public void onEnd(Call call) {
169+
mProgressBar.setVisibility(View.GONE);
170+
ToastUtils.show("下载结束");
171+
}
159172

160-
public class BaseActivity extends AppCompatActivity {
161-
162-
@Override
163-
protected void onDestroy() {
164-
EasyHttp.cancel(this);
165-
super.onDestroy();
166-
}
167-
}
173+
}).start();
168174

169175
#### 关于 Http 明文请求
170176

171177
> Android P 限制了明文流量的网络请求,非加密的流量请求都会被系统禁止掉。
172-
如果当前应用的请求是 htttp 请求,而非 https ,这样就会导系统禁止当前应用进行该请求,如果 WebView 的 url 用 http 协议,同样会出现加载失败,https 不受影响
178+
如果当前应用的请求是 http 请求,而非 https ,这样就会导系统禁止当前应用进行该请求,如果 WebView 的 url 用 http 协议,同样会出现加载失败,https 不受影响
173179

174180
> 在 res 下新建一个 xml 目录,然后创建一个名为:network_security_config.xml 文件 ,该文件内容如下
175181

app/build.gradle

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,18 @@ apply plugin: 'com.android.application'
33
android {
44
compileSdkVersion 28
55

6+
// 支持 JDK 1.8
7+
compileOptions {
8+
targetCompatibility JavaVersion.VERSION_1_8
9+
sourceCompatibility JavaVersion.VERSION_1_8
10+
}
11+
612
defaultConfig {
713
applicationId "com.hjq.http.demo"
814
minSdkVersion 14
915
targetSdkVersion 28
10-
versionCode 30
11-
versionName "3.0"
16+
versionCode 50
17+
versionName "5.0"
1218
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
1319
}
1420
buildTypes {
@@ -41,7 +47,4 @@ dependencies {
4147
implementation 'com.google.code.gson:gson:2.8.5'
4248
// OkHttp 网络框架:https://github.com/square/okhttp
4349
implementation 'com.squareup.okhttp3:okhttp:3.12.1'
44-
45-
// 内存泄漏捕捉:https://github.com/square/leakcanary
46-
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.0'
4750
}

app/src/main/java/com/hjq/http/demo/BaseActivity.java

Lines changed: 71 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,80 @@
11
package com.hjq.http.demo;
22

3+
import android.app.ProgressDialog;
34
import android.support.v7.app.AppCompatActivity;
45

56
import com.hjq.http.EasyHttp;
7+
import com.hjq.http.demo.http.model.HttpData;
8+
import com.hjq.http.listener.OnHttpListener;
9+
import com.hjq.toast.ToastUtils;
610

7-
public class BaseActivity extends AppCompatActivity {
11+
import okhttp3.Call;
12+
13+
public class BaseActivity extends AppCompatActivity implements OnHttpListener {
14+
15+
/** 加载对话框 */
16+
private ProgressDialog mDialog;
17+
/** 对话框数量 */
18+
private int mDialogTotal;
19+
20+
/**
21+
* 当前加载对话框是否在显示中
22+
*/
23+
public boolean isShowDialog() {
24+
return mDialog != null && mDialog.isShowing();
25+
}
26+
27+
/**
28+
* 显示加载对话框
29+
*/
30+
public void showDialog() {
31+
if (mDialog == null) {
32+
mDialog = new ProgressDialog(this);
33+
mDialog.setMessage(getResources().getString(R.string.http_loading));
34+
mDialog.setCancelable(false);
35+
mDialog.setCanceledOnTouchOutside(false);
36+
}
37+
if (!mDialog.isShowing()) {
38+
mDialog.show();
39+
}
40+
mDialogTotal++;
41+
}
42+
43+
/**
44+
* 隐藏加载对话框
45+
*/
46+
public void hideDialog() {
47+
if (mDialogTotal == 1) {
48+
if (mDialog != null && mDialog.isShowing()) {
49+
mDialog.dismiss();
50+
}
51+
}
52+
if (mDialogTotal > 0) {
53+
mDialogTotal--;
54+
}
55+
}
56+
57+
@Override
58+
public void onStart(Call call) {
59+
showDialog();
60+
}
61+
62+
@Override
63+
public void onSucceed(Object result) {
64+
if (result instanceof HttpData) {
65+
ToastUtils.show(((HttpData) result).getMessage());
66+
}
67+
}
68+
69+
@Override
70+
public void onFail(Exception e) {
71+
ToastUtils.show(e.getMessage());
72+
}
73+
74+
@Override
75+
public void onEnd(Call call) {
76+
hideDialog();
77+
}
878

979
@Override
1080
protected void onDestroy() {

app/src/main/java/com/hjq/http/demo/MainActivity.java

Lines changed: 19 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,22 @@
2020
import com.hjq.http.demo.http.request.SearchBlogsApi;
2121
import com.hjq.http.demo.http.request.UpdateImageApi;
2222
import com.hjq.http.demo.http.response.SearchBean;
23+
import com.hjq.http.listener.HttpCallback;
2324
import com.hjq.http.listener.OnDownloadListener;
24-
import com.hjq.http.listener.OnHttpListener;
2525
import com.hjq.http.model.DownloadInfo;
2626
import com.hjq.http.model.HttpMethod;
2727
import com.hjq.permissions.OnPermission;
2828
import com.hjq.permissions.Permission;
2929
import com.hjq.permissions.XXPermissions;
3030
import com.hjq.toast.ToastUtils;
3131

32-
import org.json.JSONObject;
33-
3432
import java.io.File;
3533
import java.io.FileOutputStream;
3634
import java.io.IOException;
3735
import java.util.List;
3836

37+
import okhttp3.Call;
38+
3939
/**
4040
* author : Android 轮子哥
4141
* github : https://github.com/getActivity/EasyHttp
@@ -104,34 +104,24 @@ public void onClick(View v) {
104104
EasyHttp.get(this)
105105
.api(new SearchAuthorApi()
106106
.setAuthor("鸿洋"))
107-
.request(new OnHttpListener<HttpData<SearchBean>>() {
107+
.request(new HttpCallback<HttpData<SearchBean>>(this) {
108108

109109
@Override
110110
public void onSucceed(HttpData<SearchBean> result) {
111111
ToastUtils.show("请求成功");
112112
}
113-
114-
@Override
115-
public void onFail(Exception e) {
116-
ToastUtils.show(e.getMessage());
117-
}
118113
});
119114
break;
120115
case R.id.btn_main_post:
121116
EasyHttp.post(this)
122117
.api(new SearchBlogsApi()
123118
.setKeyword("搬砖不再有"))
124-
.request(new OnHttpListener<HttpData<SearchBean>>() {
119+
.request(new HttpCallback<HttpData<SearchBean>>(this) {
125120

126121
@Override
127122
public void onSucceed(HttpData<SearchBean> result) {
128123
ToastUtils.show("请求成功");
129124
}
130-
131-
@Override
132-
public void onFail(Exception e) {
133-
ToastUtils.show(e.getMessage());
134-
}
135125
});
136126
break;
137127
case R.id.btn_main_update:
@@ -140,19 +130,13 @@ public void onFail(Exception e) {
140130
drawableToFile(ContextCompat.getDrawable(this, R.mipmap.ic_launcher), file);
141131

142132
EasyHttp.post(this)
143-
.api(new UpdateImageApi()
144-
.setImage(file))
145-
.request(new OnHttpListener<JSONObject>() {
133+
.api(new UpdateImageApi(file))
134+
.request(new HttpCallback<String>(this) {
146135

147136
@Override
148-
public void onSucceed(JSONObject result) {
137+
public void onSucceed(String result) {
149138
ToastUtils.show("上传成功");
150139
}
151-
152-
@Override
153-
public void onFail(Exception e) {
154-
ToastUtils.show(e.getMessage());
155-
}
156140
});
157141
break;
158142
case R.id.btn_main_download:
@@ -165,29 +149,33 @@ public void onFail(Exception e) {
165149
.listener(new OnDownloadListener() {
166150

167151
@Override
168-
public void onDownloadStart(DownloadInfo info) {
152+
public void onStart(Call call) {
169153
mProgressBar.setVisibility(View.VISIBLE);
170-
ToastUtils.show("下载开始:" + info.getFile().getName());
154+
ToastUtils.show("下载开始");
171155
}
172156

173157
@Override
174-
public void onDownloadProgress(DownloadInfo info) {
158+
public void onProgress(DownloadInfo info) {
175159
mProgressBar.setProgress(info.getDownloadProgress());
176160
}
177161

178162
@Override
179-
public void onDownloadComplete(DownloadInfo info) {
180-
mProgressBar.setVisibility(View.GONE);
163+
public void onComplete(DownloadInfo info) {
181164
ToastUtils.show("下载完成:" + info.getFile().getPath());
182165
installApk(MainActivity.this, info.getFile());
183166
}
184167

185168
@Override
186-
public void onDownloadError(DownloadInfo info, Exception e) {
187-
mProgressBar.setVisibility(View.GONE);
169+
public void onError(DownloadInfo info, Exception e) {
188170
ToastUtils.show("下载出错:" + e.getMessage());
189171
}
190172

173+
@Override
174+
public void onEnd(Call call) {
175+
mProgressBar.setVisibility(View.GONE);
176+
ToastUtils.show("下载结束");
177+
}
178+
191179
}).start();
192180
break;
193181
default:

app/src/main/java/com/hjq/http/demo/MyApplication.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public void onCreate() {
2828

2929
EasyConfig.with(new OkHttpClient())
3030
// 是否打印日志
31-
.setLog(BuildConfig.DEBUG)
31+
.setLogEnabled(BuildConfig.DEBUG)
3232
// 设置服务器配置
3333
.setServer(server)
3434
// 设置请求处理策略

0 commit comments

Comments
 (0)