From 7040f16f0c725cf72df65b70291f999ace6263ac Mon Sep 17 00:00:00 2001 From: zuoxiao <470321431@qq.com> Date: 星期三, 08 一月 2025 11:00:36 +0800 Subject: [PATCH] 1.修复上传视频超时问题 --- app/src/main/java/com/dayu/pipirrapp/activity/AddIssueActivity.java | 103 +++++++++++++++++++++++++++++++++++---------------- 1 files changed, 70 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/com/dayu/pipirrapp/activity/AddIssueActivity.java b/app/src/main/java/com/dayu/pipirrapp/activity/AddIssueActivity.java index 22792da..dea3805 100644 --- a/app/src/main/java/com/dayu/pipirrapp/activity/AddIssueActivity.java +++ b/app/src/main/java/com/dayu/pipirrapp/activity/AddIssueActivity.java @@ -30,10 +30,12 @@ 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; import com.dayu.pipirrapp.utils.CommonKeyName; +import com.dayu.pipirrapp.utils.MyLog; import com.dayu.pipirrapp.utils.ServiceUtils; import com.dayu.pipirrapp.utils.ToastUtil; import com.dayu.pipirrapp.view.TitleBar; @@ -53,8 +55,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; @@ -73,11 +77,14 @@ RecyclerView mRecyclerView; AddPictureAdapter mAdapter; int maxSelectNum = 10;//鏈�澶х収鐗� - int maxSelectVideoNum = 0;//鏈�澶ц棰� + int maxSelectVideoNum = 3;//鏈�澶ц棰� + + int videoMaxSecond = 60; private final List<LocalMedia> mData = new ArrayList<>(); private ActivityResultLauncher<Intent> launcherResult; private ImageEngine imageEngine; - List<UplodFileState> uplodFileStates = new ArrayList<>(); + Map<String, UplodFileState> uplodFileStates = new HashMap<>(); + // List<UplodFileState> uplodFileStates = new ArrayList<>(); LatLonBean latLonBean; /** @@ -112,7 +119,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(); @@ -137,10 +144,15 @@ public void onDeleteClick(int position) { deleteItem(position); } + + @Override + public void onReUpload(UplodFileState uplodFileState) { + uplodeImg(uplodFileState); + } }); binding.dealButton.setOnClickListener(v -> { boolean isAllPost = true; - for (UplodFileState imgData : uplodFileStates) { + for (UplodFileState imgData : uplodFileStates.values()) { if (imgData.getState() == 0) { isAllPost = false; } @@ -148,7 +160,7 @@ if (!TextUtils.isEmpty(binding.contentET.getText().toString())) { if (isAllPost) { - if (uplodFileStates.size() > 0) { + if (!uplodFileStates.isEmpty()) { postData(); } else { ToastUtil.showToast(AddIssueActivity.this, "璇蜂笂浼犲浘鐗�"); @@ -168,12 +180,20 @@ private void mOpenPicture() { // 杩涘叆鐩稿唽 PictureSelectionModel selectionModel = PictureSelector.create(this) - .openGallery(SelectMimeType.ofImage()) + .openGallery(SelectMimeType.ofAll()) .setMaxSelectNum(maxSelectNum) .setMaxVideoSelectNum(maxSelectVideoNum) .setImageEngine(imageEngine) //璁剧疆鍥剧墖鍘嬬缉 .setCompressEngine(new ImageFileCompressEngine()) + //璁剧疆瑙嗛鍥剧墖涓�璧峰湪鐩稿唽閫夋嫨 + .isWithSelectVideoImage(true) + //璁剧疆鏈�澶ц棰戞椂闀� + .setRecordVideoMaxSecond(videoMaxSecond) + // 杩囨护瑙嗛鏈�澶ф椂闀� + .setFilterVideoMaxSecond(videoMaxSecond) + // 鎷嶇収鏄惁绾犳鏃嬭浆鍥剧墖 + .isCameraRotateImage(true) .setSelectedData(mAdapter.getData()); selectionModel.forResult(launcherResult); @@ -223,7 +243,7 @@ private void analyticalSelectResults(ArrayList<LocalMedia> result) { //鑾峰彇褰撳墠uplodFileStates鎵�鏈夌殑鍥剧墖鍦板潃 Set<String> existingPaths = new HashSet<>(); - for (UplodFileState uplodData : uplodFileStates) { + for (UplodFileState uplodData : uplodFileStates.values()) { existingPaths.add(uplodData.getFilePath()); } //鑾峰彇鍦≒ictureSelector鐨勭浉鍐屾椂鍙栨秷閫変腑鐨勫浘鐗� @@ -257,12 +277,23 @@ Log.i(TAG, "瑁佸壀瀹介珮: " + media.getCropImageWidth() + "x" + media.getCropImageHeight()); Log.i(TAG, "鏂囦欢澶у皬: " + PictureFileUtils.formatAccurateUnitFileSize(media.getSize())); Log.i(TAG, "鏂囦欢鏃堕暱: " + media.getDuration()); + Log.i(TAG, "鎵╁睍鍚�: " + media.getMimeType()); String compressPath = media.getCompressPath(); //鍒ゆ柇鏄惁鏈夎繖涓矾寰勶紝娌℃湁鐨勮瘽涓婁紶璇ュ浘鐗囧苟娣诲姞uplodFileStates涓� + if (TextUtils.isEmpty(compressPath)) { + compressPath = media.getRealPath(); + } if (!existingPaths.contains(compressPath)) { UplodFileState uplodFileState = new UplodFileState(); uplodFileState.setFilePath(compressPath); - uplodFileStates.add(uplodFileState); + 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); // 鎵ц涓婁紶鍥剧墖鐨勬搷浣� uplodeImg(uplodFileState); } @@ -271,13 +302,17 @@ //澶勭悊浠庣浉鍐岃繑鍥炴椂鍙栨秷鐨勫浘鐗囧鐞� existingPaths.removeAll(resultPaths); if (!existingPaths.isEmpty()) { + List<UplodFileState> toRemove = new ArrayList<>(); for (String path : existingPaths) { - for (UplodFileState uplodFileState : uplodFileStates) { + for (UplodFileState uplodFileState : uplodFileStates.values()) { if (path.equals(uplodFileState.getFilePath())) { uplodFileState.getThisCall().cancel(); - uplodFileStates.remove(uplodFileState); + toRemove.add(uplodFileState); } } + } + for (UplodFileState removeFile : toRemove) { + uplodFileStates.remove(removeFile.getFilePath()); } } runOnUiThread(new Runnable() { @@ -298,20 +333,7 @@ //涓婁紶鍥剧墖 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); // 鏇存柊瀵瑰簲鐨勯」 - } - } - - } - } - }); + FileUploadUtils.uploadFile(this, uplodFileState, uplodFileStates, mAdapter); } /** @@ -351,7 +373,7 @@ * 寮�濮嬪畾浣嶇浉鍏抽�昏緫 */ private void startLocation() { - ServiceUtils.startLocationService(this, true); + ServiceUtils.startLocationService(this, true); //鑾峰彇瀹氫綅鏈嶅姟浼犺繃鏉ョ殑鍧愭爣鐐� LiveEventBus.get(CommonKeyName.locationData).observeForever(locationObserver); } @@ -361,20 +383,35 @@ 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