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/tool/FileUploadUtils.java | 92 +++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 86 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/dayu/pipirrapp/tool/FileUploadUtils.java b/app/src/main/java/com/dayu/pipirrapp/tool/FileUploadUtils.java index 5755332..6803845 100644 --- a/app/src/main/java/com/dayu/pipirrapp/tool/FileUploadUtils.java +++ b/app/src/main/java/com/dayu/pipirrapp/tool/FileUploadUtils.java @@ -1,13 +1,18 @@ package com.dayu.pipirrapp.tool; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + import android.content.Context; +import android.text.TextUtils; import com.dayu.pipirrapp.adapter.AddPictureAdapter; import com.dayu.pipirrapp.bean.net.UplodFileState; import com.dayu.pipirrapp.net.ApiManager; import com.dayu.pipirrapp.net.BaseResponse; -import com.dayu.pipirrapp.net.upload.UploadFileListener; +import com.luck.picture.lib.entity.LocalMedia; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import retrofit2.Call; @@ -38,21 +43,96 @@ } /** - * 褰撳叧闂璦ctivity鏃跺叧闂墍鏈夎姹� + * 褰撳叧闂璦ctivity鏃跺叧闂墍鏈夎姹� + * * @param uplodFileStates */ - public static void cancelAllCall(Map<String, UplodFileState> uplodFileStates){ + public static void cancelAllCall(Map<String, UplodFileState> uplodFileStates) { try { - for(UplodFileState uplodFileState:uplodFileStates.values()){ - Call<BaseResponse> mCall =uplodFileState.getThisCall(); + for (UplodFileState uplodFileState : uplodFileStates.values()) { + Call<BaseResponse> mCall = uplodFileState.getThisCall(); if (mCall != null) { mCall.cancel(); } } } catch (Exception e) { - e.printStackTrace(); + e.printStackTrace(); } } + // 鏇存柊UI + public static void updateUI(ArrayList<LocalMedia> result, AddPictureAdapter mAdapter) { + 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()); + }); + } + + public static void cancelRemovedUploads(ArrayList<LocalMedia> result, Map<String, UplodFileState> uplodFileStates) { + List<String> pathsToRemove = new ArrayList<>(); + for (UplodFileState uplodFileState : uplodFileStates.values()) { + String filePath = uplodFileState.getFilePath(); + // 妫�鏌� result 涓槸鍚﹀寘鍚鏂囦欢璺緞 + boolean isInResult = false; + for (LocalMedia media : result) { + String compressPath = media.getCompressPath(); + //鍒ゆ柇鏄惁鏈夎繖涓矾寰勶紝娌℃湁鐨勮瘽涓婁紶璇ュ浘鐗囧苟娣诲姞uplodFileStates涓� + if (TextUtils.isEmpty(compressPath)) { + compressPath = media.getRealPath(); + } + if (compressPath.equals(filePath)) { + isInResult = true; + break; + } + } + // 濡傛灉 result 涓病鏈夎璺緞锛屽垯灏嗗叾鍔犲叆寰呯Щ闄ゅ垪琛� + if (!isInResult) { + try { + //娌℃湁璇ユ枃浠朵互鍚庡彇娑堜笂浼� + uplodFileState.getThisCall().cancel(); + } catch (Exception e) { + e.printStackTrace(); + } + pathsToRemove.add(filePath); + } + } + for (String removeFile : pathsToRemove) { + uplodFileStates.remove(removeFile); + } + } + + /** + * + * @param context + * @param media + * @param uplodFileStates + * @param mAdapter + */ + public static void creatAndUploadFile(Context context, LocalMedia media, Map<String, UplodFileState> uplodFileStates, AddPictureAdapter mAdapter) { + String compressPath = media.getCompressPath(); + //鍒ゆ柇鏄惁鏈夎繖涓矾寰勶紝娌℃湁鐨勮瘽涓婁紶璇ュ浘鐗囧苟娣诲姞uplodFileStates涓� + if (TextUtils.isEmpty(compressPath)) { + compressPath = media.getRealPath(); + } + if (!uplodFileStates.containsKey(compressPath)) { + UplodFileState uplodFileState = new UplodFileState(); + uplodFileState.setFilePath(compressPath); + if (compressPath.toLowerCase().endsWith(".mp4") || compressPath.toLowerCase().endsWith(".avi") || compressPath.toLowerCase().endsWith(".mkv") || compressPath.toLowerCase().endsWith(".mov")) { + // 杩欐槸瑙嗛鏂囦欢 + uplodFileState.setUploadType(UplodFileState.VIDEO_TYPE); + } else { + uplodFileState.setUploadType(UplodFileState.IMG_TYPE); + } + uplodFileState.setExtName(media.getMimeType()); + uplodFileStates.put(compressPath, uplodFileState); + // 鎵ц涓婁紶鍥剧墖鐨勬搷浣� + FileUploadUtils.uploadFile(context, uplodFileState, uplodFileStates, mAdapter); + } + } + } -- Gitblit v1.8.0