From 94c235c116ebca594662417b5fb2c7378f326c6b Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期三, 08 一月 2025 18:12:31 +0800
Subject: [PATCH] 1.优化上传相关代码。 2.修复多个文件上传时进度条显示异常。
---
app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java | 111 ++++++++++++++++++++-----------------------------------
1 files changed, 40 insertions(+), 71 deletions(-)
diff --git a/app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java b/app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java
index ffc7a1c..161f6d3 100644
--- a/app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java
+++ b/app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java
@@ -29,6 +29,7 @@
import com.dayu.pipirrapp.net.BaseResponse;
import com.dayu.pipirrapp.net.subscribers.SubscriberListener;
import com.dayu.pipirrapp.net.upload.UploadFileListener;
+import com.dayu.pipirrapp.tool.FileUploadUtils;
import com.dayu.pipirrapp.tool.FullyGridLayoutManager;
import com.dayu.pipirrapp.tool.GlideEngine;
import com.dayu.pipirrapp.tool.ImageFileCompressEngine;
@@ -53,8 +54,10 @@
import com.tencent.bugly.crashreport.CrashReport;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import retrofit2.Call;
@@ -77,7 +80,8 @@
private final List<LocalMedia> mData = new ArrayList<>();
private ActivityResultLauncher<Intent> launcherResult;
private ImageEngine imageEngine;
- List<UplodFileState> uplodFileStates = new ArrayList<>();
+ // List<UplodFileState> uplodFileStates = new ArrayList<>();
+ Map<String, UplodFileState> uplodFileStates = new HashMap<>();
String workOrderId;
LatLonBean latLonBean;
@@ -116,7 +120,7 @@
}
mRecyclerView.addItemDecoration(new GridSpacingItemDecoration(4,
DensityUtil.dip2px(this, 8), false));
- mAdapter = new AddPictureAdapter(this, mData);
+ mAdapter = new AddPictureAdapter(this, mData, uplodFileStates);
mAdapter.setSelectMax(maxSelectNum + maxSelectVideoNum);
mRecyclerView.setAdapter(mAdapter);
imageEngine = GlideEngine.createGlideEngine();
@@ -141,10 +145,15 @@
public void onDeleteClick(int position) {
deleteItem(position);
}
+
+ @Override
+ public void onReUpload(UplodFileState uplodFileState) {
+ FileUploadUtils.uploadFile(OrderDealActivity.this, uplodFileState, uplodFileStates, mAdapter);
+ }
});
binding.dealButton.setOnClickListener(v -> {
boolean isAllPost = true;
- for (UplodFileState imgData : uplodFileStates) {
+ for (UplodFileState imgData : uplodFileStates.values()) {
if (imgData.getState() == 0) {
isAllPost = false;
}
@@ -225,13 +234,6 @@
* @param result
*/
private void analyticalSelectResults(ArrayList<LocalMedia> result) {
- //鑾峰彇褰撳墠uplodFileStates鎵�鏈夌殑鍥剧墖鍦板潃
- Set<String> existingPaths = new HashSet<>();
- for (UplodFileState uplodData : uplodFileStates) {
- existingPaths.add(uplodData.getFilePath());
- }
- //鑾峰彇鍦≒ictureSelector鐨勭浉鍐屾椂鍙栨秷閫変腑鐨勫浘鐗�
- Set<String> resultPaths = new HashSet<>();
for (LocalMedia media : result) {
if (media.getWidth() == 0 || media.getHeight() == 0) {
if (PictureMimeType.isHasImage(media.getMimeType())) {
@@ -260,62 +262,16 @@
Log.i(TAG, "瑁佸壀瀹介珮: " + media.getCropImageWidth() + "x" + media.getCropImageHeight());
Log.i(TAG, "鏂囦欢澶у皬: " + PictureFileUtils.formatAccurateUnitFileSize(media.getSize()));
Log.i(TAG, "鏂囦欢鏃堕暱: " + media.getDuration());
- String compressPath = media.getCompressPath();
- //鍒ゆ柇鏄惁鏈夎繖涓矾寰勶紝娌℃湁鐨勮瘽涓婁紶璇ュ浘鐗�
- if (!existingPaths.contains(compressPath)) {
- UplodFileState uplodFileState = new UplodFileState();
- uplodFileState.setFilePath(compressPath);
- uplodFileStates.add(uplodFileState);
- // 鎵ц涓婁紶鍥剧墖鐨勬搷浣�
- uplodeImg(uplodFileState);
- }
-
- resultPaths.add(media.getCompressPath());
+ Log.i(TAG, "鎵╁睍鍚�: " + media.getMimeType());
+ FileUploadUtils.creatAndUploadFile(this, media, uplodFileStates, mAdapter);
}
- //澶勭悊浠庣浉鍐岃繑鍥炴椂鍙栨秷鐨勫浘鐗囧鐞�
- existingPaths.removeAll(resultPaths);
- if (!existingPaths.isEmpty()) {
- List<UplodFileState> toRemove = new ArrayList<>();
- for (String path : existingPaths) {
- for (UplodFileState uplodFileState : uplodFileStates) {
- if (path.equals(uplodFileState.getFilePath())) {
- uplodFileState.getThisCall().cancel();
- toRemove.add(uplodFileState);
- }
- }
- }
- uplodFileStates.removeAll(toRemove);
- }
- runOnUiThread(() -> {
- boolean isMaxSize = result.size() == mAdapter.getSelectMax();
- int oldSize = mAdapter.getData().size();
- mAdapter.notifyItemRangeRemoved(0, isMaxSize ? oldSize + 1 : oldSize);
- mAdapter.getData().clear();
-
- mAdapter.getData().addAll(result);
- mAdapter.notifyItemRangeInserted(0, result.size());
-
- });
+ // 鑾峰彇 result 涓病鏈夎�� uplodFileStates 涓湁鐨勫湴鍧�
+ FileUploadUtils.cancelRemovedUploads(result, uplodFileStates);
+ // 鏇存柊UI
+ FileUploadUtils.updateUI(result, mAdapter);
}
- //涓婁紶鍥剧墖
- private void uplodeImg(UplodFileState uplodFileState) {
- ApiManager.getInstance().uploadFile(this, uplodFileState, new UploadFileListener() {
- @Override
- public void onBack(UplodFileState state) {
- for (UplodFileState uplodFile : uplodFileStates) {
- if (uplodFile.getFilePath().equals(state.getFilePath())) {
- int index = uplodFileStates.indexOf(uplodFile);
- if (index != -1) {
- uplodFileStates.set(index, uplodFile); // 鏇存柊瀵瑰簲鐨勯」
- }
- }
-
- }
- }
- });
- }
/**
* 涓婃姤澶勭悊缁撴灉
@@ -355,7 +311,7 @@
* 寮�濮嬪畾浣嶇浉鍏抽�昏緫
*/
private void startLocation() {
- ServiceUtils.startLocationService(this,true);
+ ServiceUtils.startLocationService(this, true);
//鑾峰彇瀹氫綅鏈嶅姟浼犺繃鏉ョ殑鍧愭爣鐐�
LiveEventBus.get(CommonKeyName.locationData).observeForever(locationObserver);
}
@@ -365,20 +321,33 @@
protected void onDestroy() {
super.onDestroy();
LiveEventBus.get(CommonKeyName.locationData).removeObserver(locationObserver);
+ FileUploadUtils.cancelAllCall(uplodFileStates);
}
/**
* 棰勮鍜屽浘鐗囧垪琛ㄥ垹闄ゅ浘鐗囨椂澶勭悊鍒犻櫎浜嬩欢
*/
private void deleteItem(int position) {
- try {
- Call<BaseResponse> mCall = uplodFileStates.get(position).getThisCall();
- if (mCall != null) {
- mCall.cancel();
- }
- } catch (Exception e) {
- e.printStackTrace();
+ LocalMedia localMedia = mAdapter.getData().get(position);
+ String path;
+ UplodFileState uplodFileState;
+ if (TextUtils.isEmpty(localMedia.getCompressPath())) {
+ uplodFileState = uplodFileStates.get(localMedia.getRealPath());
+ } else {
+ uplodFileState = uplodFileStates.get(localMedia.getCompressPath());
}
- uplodFileStates.remove(position);
+ if (uplodFileState != null) {
+ path = uplodFileState.getFilePath();
+ try {
+ Call<BaseResponse> mCall = uplodFileStates.get(path).getThisCall();
+ if (mCall != null) {
+ mCall.cancel();
+ MyLog.d("progressRequestBody>>>" + "cancel銆嬨�嬨�媝ath:" + path);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ uplodFileStates.remove(path);
+ }
}
}
--
Gitblit v1.8.0