Skip to content

Commit 1d1588e

Browse files
AriesHooAriesHoo
authored andcommitted
重大变更:重构大部分代码及实现方式删除许多类及实现方法包括三方库慎重升级与之前版本有很大差异
优化:BasisFragment 控制是否为单Fragment 方法 优化:调整ActivityFragmentControl 将状态栏及导航栏控制增加 优化:多状态管理StatusLayoutManager调整完成 优化:滑动返回控制swipeBack功能新增各种回调功能 优化:将原默认配置方法调整到最终实现类功能 新增:增加友盟统计功能演示 新增:新增首页演示其它三方库状态栏及导航栏功能控制 新增:个人MineFragment中选择头像功能三方库状态栏及导航栏控制示例 优化:UI全局控制相关回调并调整三方库Activity控制 优化:新增FastRetrofit 下载/上传功能 优化:新增FastRetrofit 控制多BaseUrl方式 新增:新增Demo检查版本功能试验下载文件功能 删除:删除原多状态布局相关配置 修复:修改FastRefreshActivity 设置Adapter错误BUG 升级:升级部分三方库版本 修复:删除IHttpRequestControl判断避免http错误时无法全局控制BUG 优化:修改解析method方法增加对get方法兼容 优化:修改ToastUtil 增加子线程调用自动切换主线程操作 优化:优化下载功能新增FastDownloadRetrofit并新增格式化文件方法FastFormatUtil#formatDataSize 修复:修复FastRetrofit无法删除单个header问题 优化:优化上传文件并通过新增的FastUploadRequestBody及FastUploadRequestListener实现单个/多个文件 上传进度监听 可参看 MineFragment 示例
1 parent fe93ec8 commit 1d1588e

File tree

10 files changed

+207
-29
lines changed

10 files changed

+207
-29
lines changed

app/src/main/java/com/aries/library/fast/demo/App.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@
1111
import com.aries.library.fast.util.SizeUtil;
1212
import com.umeng.analytics.MobclickAgent;
1313

14-
import okhttp3.logging.HttpLoggingInterceptor;
15-
1614
/**
1715
* Created: AriesHoo on 2018/7/2 9:31
1816
* E-Mail: AriesHoo@126.com
@@ -70,8 +68,8 @@ public void onCreate() {
7068
// .addHeader(header)
7169
// .addHeader(key,value)
7270
//设置请求全局log-可设置tag及Level类型
73-
.setLogEnable(BuildConfig.DEBUG)
74-
.setLogEnable(BuildConfig.DEBUG, TAG, HttpLoggingInterceptor.Level.BODY)
71+
.setLogEnable(false)
72+
// .setLogEnable(BuildConfig.DEBUG, TAG, HttpLoggingInterceptor.Level.BODY)
7573
//设置统一超时--也可单独调用read/write/connect超时(可以设置时间单位TimeUnit)
7674
//默认20 s
7775
.setTimeout(30);

app/src/main/java/com/aries/library/fast/demo/helper/ImagePickerHelper.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,16 @@ public void selectPicture(int requestCode, int count, OnImageSelect onImageSelec
5757
.forResult(mRequestCode);
5858
}
5959

60+
public void selectFile(int requestCode, int count, OnImageSelect onImageSelect) {
61+
this.mOnImageSelect = onImageSelect;
62+
this.mRequestCode = requestCode;
63+
PictureSelector.create(mContext)
64+
.openGallery(PictureMimeType.ofImage())
65+
.theme(StatusBarUtil.isSupportStatusBarFontChange() ? R.style.PicturePickerStyle : R.style.PicturePickerStyle_White)
66+
.maxSelectNum(count)
67+
.selectionMode(PictureConfig.TYPE_ALL)
68+
.forResult(mRequestCode);
69+
}
6070
public void onActivityResult(int requestCode, int resultCode, Intent data) {
6171
LoggerManager.i("onActivityResult", "path:");
6272
if (resultCode == Activity.RESULT_OK) {

app/src/main/java/com/aries/library/fast/demo/module/mine/MineFragment.java

Lines changed: 75 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package com.aries.library.fast.demo.module.mine;
22

3+
import android.app.ProgressDialog;
34
import android.content.Intent;
45
import android.graphics.Color;
56
import android.os.Bundle;
67
import android.support.v4.view.ViewCompat;
8+
import android.support.v7.app.AlertDialog;
79
import android.view.Gravity;
810
import android.view.View;
911
import android.widget.ImageView;
@@ -22,12 +24,17 @@
2224
import com.aries.library.fast.retrofit.FastLoadingObserver;
2325
import com.aries.library.fast.retrofit.FastRetrofit;
2426
import com.aries.library.fast.retrofit.FastTransformer;
27+
import com.aries.library.fast.retrofit.FastUploadRequestBody;
28+
import com.aries.library.fast.retrofit.FastUploadRequestListener;
29+
import com.aries.library.fast.util.FastFormatUtil;
2530
import com.aries.library.fast.util.FastUtil;
2631
import com.aries.library.fast.util.SizeUtil;
27-
import com.aries.library.fast.util.ToastUtil;
32+
import com.aries.library.fast.widget.FastLoadDialog;
2833
import com.aries.ui.view.title.TitleBarView;
2934

3035
import java.io.File;
36+
import java.io.IOException;
37+
import java.util.List;
3138

3239
import butterknife.BindView;
3340
import butterknife.OnClick;
@@ -99,41 +106,84 @@ public void initView(Bundle savedInstanceState) {
99106
}
100107

101108
mIvHead.setOnClickListener(v -> mImagePickerHelper.selectPicture(1000, (requestCode, list) -> {
102-
if (list == null || list.size() == 0) {
109+
if (list == null || list.size() == 0 || requestCode != 1000) {
103110
return;
104111
}
105112
GlideManager.loadCircleImg(list.get(0), mIvHead);
106-
// uploadFile(new File(list.get(0)));
107113
}));
108114

109115
mStvUpdate.setRightString("当前版本:V" + FastUtil.getVersionName(mContext));
110116
}
111117

112118
/**
113-
* 演示文件上传
119+
* 演示文件上传--需设置自己的上传路径
114120
*
115-
* @param file
121+
* @param listFile
116122
*/
117-
private void uploadFile(File file) {
118-
RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM)
123+
private void uploadFile(List<String> listFile) {
124+
if (listFile == null) return;
125+
final ProgressDialog mProgressDialog = new ProgressDialog(mContext);
126+
mProgressDialog.setTitle("上传文件");
127+
mProgressDialog.setIndeterminate(false);
128+
mProgressDialog.setMessage("上传中...");
129+
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
130+
mProgressDialog.setProgressNumberFormat("0.00MB/未知");
131+
MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM)
119132
//额外参数
120-
.addFormDataPart("basicId", "basicId")
121-
//key为与后台协商制定
122-
.addFormDataPart("uploadfiles", file.getName(), RequestBody.create(MultipartBody.FORM, file))
123-
.addFormDataPart("uploadfiles", file.getName(), RequestBody.create(MultipartBody.FORM, file))
124-
.build();
125-
FastRetrofit.getInstance().uploadFile("http://XXXX:8088/v1/ftp/upload-files", requestBody)
133+
.addFormDataPart("basicId", "basicId");
134+
//添加上传实体
135+
for (int i = 0; i < listFile.size(); i++) {
136+
File file = new File(listFile.get(i));
137+
int finalI = i;
138+
builder.addFormDataPart("uploadfiles", file.getName(), getUploadRequestBody(file, new FastUploadRequestListener() {
139+
@Override
140+
public void onProgress(float progress, long current, long total) {
141+
mProgressDialog.setMessage("上传中(" + (finalI + 1) + "/" + listFile.size() + ")");
142+
mProgressDialog.setProgressNumberFormat(FastFormatUtil.formatDataSize(current) + "/" + FastFormatUtil.formatDataSize(total));
143+
mProgressDialog.setMax((int) total);
144+
mProgressDialog.setProgress((int) current);
145+
LoggerManager.i("uploadFile", ":i=" + finalI + ";progress:" + progress + ";current:" + current + ";total:" + total);
146+
}
147+
148+
@Override
149+
public void onFail(Throwable e) {
150+
LoggerManager.i("uploadFile", "error:" + e.getMessage());
151+
}
152+
}));
153+
}
154+
RequestBody requestBody = builder.build();
155+
//上传地址需自行设置
156+
FastRetrofit.getInstance().uploadFile("http://XXXX/v1/ftp/upload-files", requestBody)
126157
.compose(FastTransformer.switchSchedulers())
127-
.subscribe(new FastLoadingObserver<ResponseBody>(mContext, R.string.uploading) {
158+
.subscribe(new FastLoadingObserver<ResponseBody>(new FastLoadDialog(mContext, mProgressDialog)) {
128159
@Override
129160
public void _onNext(ResponseBody entity) {
130-
ToastUtil.show("entity:" + entity.contentLength());
161+
String message = "上传返回:";
162+
try {
163+
message += entity.string();
164+
} catch (IOException e) {
165+
e.printStackTrace();
166+
}
167+
new AlertDialog.Builder(mContext)
168+
.setTitle("上传文件返回结果")
169+
.setMessage(message)
170+
.setPositiveButton(R.string.ensure, null)
171+
.create()
172+
.show();
131173
}
132174
});
133175
}
134176

177+
178+
private RequestBody getUploadRequestBody(File file, FastUploadRequestListener listener) {
179+
if (listener == null) {
180+
return RequestBody.create(MultipartBody.FORM, file);
181+
}
182+
return new FastUploadRequestBody(RequestBody.create(MultipartBody.FORM, file), listener);
183+
}
184+
135185
@OnClick({R.id.stv_setting, R.id.stv_libraryMine, R.id.stv_thirdLibMine
136-
, R.id.stv_shareMine, R.id.stv_updateMine})
186+
, R.id.stv_shareMine, R.id.stv_updateMine, R.id.stv_uploadMine})
137187
public void onViewClicked(View view) {
138188
switch (view.getId()) {
139189
case R.id.stv_setting:
@@ -152,13 +202,21 @@ public void onViewClicked(View view) {
152202
CheckVersionHelper.with((BasisActivity) mContext)
153203
.checkVersion(true);
154204
break;
205+
case R.id.stv_uploadMine:
206+
mImagePickerHelper.selectFile(1001, 5, (requestCode, list) -> {
207+
if (list == null || list.size() == 0 || requestCode != 1001) {
208+
return;
209+
}
210+
uploadFile(list);
211+
});
212+
break;
155213
}
156214
}
157215

158216
@Override
159217
public void onActivityResult(int requestCode, int resultCode, Intent data) {
160218
super.onActivityResult(requestCode, resultCode, data);
161-
if (mImagePickerHelper != null && requestCode == 1000) {
219+
if (mImagePickerHelper != null) {
162220
mImagePickerHelper.onActivityResult(requestCode, resultCode, data);
163221
}
164222
}

app/src/main/res/layout/fragment_mine.xml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,5 +90,17 @@
9090
app:sLeftIconRes="@drawable/ic_update"
9191
app:sLeftIconWidth="22dp"
9292
app:sLeftTextString="@string/update"/>
93+
94+
95+
<com.allen.library.SuperTextView
96+
android:id="@+id/stv_uploadMine"
97+
style="@style/SupperTextStyleItem"
98+
android:layout_marginTop="@dimen/dp_margin_item"
99+
app:sDividerLineType="both"
100+
app:sLeftIconHeight="22dp"
101+
app:sLeftIconMarginLeft="13dp"
102+
app:sLeftIconRes="@drawable/ic_update"
103+
app:sLeftIconWidth="22dp"
104+
app:sLeftTextString="@string/upload_file"/>
93105
</LinearLayout>
94106
</ScrollView>

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,5 @@
2323
<string name="checking">检查新版本中...</string>
2424
<string name="update_now">立即更新</string>
2525
<string name="uploading">上传中...</string>
26+
<string name="upload_file">上传文件演示</string>
2627
</resources>

library/src/main/java/com/aries/library/fast/retrofit/FastDownloadObserver.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import java.io.IOException;
1313
import java.io.InputStream;
1414

15-
import io.reactivex.observers.DefaultObserver;
1615
import okhttp3.ResponseBody;
1716

1817
/**
@@ -21,8 +20,9 @@
2120
* Function:快速下载观察者
2221
* Description:
2322
* 1、2018-7-11 16:38:18 去掉部分参数
23+
* 2、2018-7-12 11:28:04 修改继承关系方便全局错误控制
2424
*/
25-
public abstract class FastDownloadObserver extends DefaultObserver<ResponseBody> {
25+
public abstract class FastDownloadObserver extends FastObserver<ResponseBody> {
2626

2727
private Dialog mDialog;
2828
private Handler mHandler;
@@ -70,6 +70,11 @@ public void run() {
7070
});
7171
}
7272

73+
@Override
74+
public void _onNext(ResponseBody entity) {
75+
76+
}
77+
7378
@Override
7479
public void onNext(ResponseBody entity) {
7580
final File file;

library/src/main/java/com/aries/library/fast/retrofit/FastRetrofit.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ public Observable<ResponseBody> downloadFile(String fileUrl, Map<String, Object>
175175
}
176176

177177
/**
178-
* 上传文件/参数
178+
* 上传文件/参数 配合{@link FastUploadRequestBody}及{@link FastUploadRequestListener}实现上传进度监听
179179
*
180180
* @param uploadUrl
181181
* @param body
@@ -186,23 +186,22 @@ public Observable<ResponseBody> uploadFile(String uploadUrl, @Nullable RequestBo
186186
}
187187

188188
/**
189-
* 上传文件/参数
189+
* 上传文件/参数 配合{@link FastUploadRequestBody}及{@link FastUploadRequestListener}实现上传进度监听
190190
*
191191
* @param uploadUrl 请求全路径
192192
* @param body 请求body 可将文件及其他参数放进body
193-
* @param header
193+
* @param header 可设置额外请求头信息
194194
* @return
195195
*/
196196
public Observable<ResponseBody> uploadFile(String uploadUrl, @Nullable final RequestBody body, Map<String, Object> header) {
197-
return getInstance()
198-
.getRetrofit()
197+
return getInstance().getRetrofit()
199198
.create(FastRetrofitService.class)
200199
.uploadFile(uploadUrl, body, header == null ? new HashMap<String, Object>() : header)
201200
.compose(FastTransformer.<ResponseBody>switchSchedulers());
202201
}
203202

204203
/**
205-
* 设置请求头
204+
* 设置请求头{@link #mHeaderInterceptor}
206205
*
207206
* @param key
208207
* @param value

library/src/main/java/com/aries/library/fast/retrofit/FastRetrofitService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,5 @@ interface FastRetrofitService {
4141
*/
4242
@POST
4343
Observable<ResponseBody> uploadFile(@Url String uploadUrl, @Body RequestBody body, @HeaderMap Map<String, Object> header);
44+
4445
}
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package com.aries.library.fast.retrofit;
2+
3+
import java.io.IOException;
4+
5+
import okhttp3.MediaType;
6+
import okhttp3.RequestBody;
7+
import okio.Buffer;
8+
import okio.BufferedSink;
9+
import okio.ForwardingSink;
10+
import okio.Okio;
11+
import okio.Sink;
12+
13+
/**
14+
* Created: AriesHoo on 2018/7/11 17:32
15+
* E-Mail: AriesHoo@126.com
16+
* Function: 封装上传进度监听
17+
* Description:
18+
*/
19+
public class FastUploadRequestBody extends RequestBody {
20+
private RequestBody mRequestBody;
21+
private FastUploadRequestListener mListener;
22+
23+
public FastUploadRequestBody(RequestBody requestBody, FastUploadRequestListener uploadListener) {
24+
mRequestBody = requestBody;
25+
mListener = uploadListener;
26+
}
27+
28+
@Override
29+
public MediaType contentType() {
30+
return mRequestBody.contentType();
31+
}
32+
33+
@Override
34+
public long contentLength() {
35+
try {
36+
return mRequestBody.contentLength();
37+
} catch (IOException e) {
38+
if (mListener != null) {
39+
mListener.onFail(e);
40+
}
41+
return -1;
42+
}
43+
}
44+
45+
@Override
46+
public void writeTo(BufferedSink sink) throws IOException {
47+
//BufferedSink 是 Buffer 类型;
48+
// 而实际进行网络请求的 BufferedSink 是 FixedLengthSink;
49+
// 所以修改 FastUploadRequestBody 里的 writeTo(BufferedSink sink) 方法;
50+
// 如果传入的 sink 为 Buffer 对象,则直接写入,不进行进度统计
51+
if (sink instanceof Buffer) {
52+
mRequestBody.writeTo(sink);
53+
return;
54+
}
55+
BufferedSink bufferedSink = Okio.buffer(new CountingSink(sink));
56+
mRequestBody.writeTo(bufferedSink);
57+
bufferedSink.flush();
58+
}
59+
60+
class CountingSink extends ForwardingSink {
61+
62+
private long mCurrent = 0;
63+
private long mTotal = -1;
64+
65+
public CountingSink(Sink delegate) {
66+
super(delegate);
67+
}
68+
69+
@Override
70+
public void write(Buffer source, long byteCount) throws IOException {
71+
super.write(source, byteCount);
72+
mCurrent += byteCount;
73+
if (mTotal == -1) {
74+
mTotal = contentLength();
75+
}
76+
if (mListener != null)
77+
mListener.onProgress(mCurrent * 1.0f / contentLength(), mCurrent, mTotal);
78+
}
79+
}
80+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.aries.library.fast.retrofit;
2+
3+
/**
4+
* Created: AriesHoo on 2018/7/11 17:33
5+
* E-Mail: AriesHoo@126.com
6+
* Function: 上传进度监听
7+
* Description:
8+
*/
9+
public interface FastUploadRequestListener {
10+
11+
void onProgress(float progress, long current, long total);
12+
13+
void onFail(Throwable e);
14+
}

0 commit comments

Comments
 (0)