From 51e977ecf8b086b5402271486fb87c2f57d641f2 Mon Sep 17 00:00:00 2001 From: zuoxiao <470321431@qq.com> Date: 星期四, 02 一月 2025 09:23:24 +0800 Subject: [PATCH] 添加视频上传的部分功能 --- app/src/main/java/com/dayu/pipirrapp/adapter/AddPictureAdapter.java | 59 +++++++++----- app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java | 108 ++++++++++++++------------- app/src/main/java/com/dayu/pipirrapp/net/RetrofitClient.java | 4 app/src/main/java/com/dayu/pipirrapp/activity/AddIssueActivity.java | 29 +++++-- 4 files changed, 114 insertions(+), 86 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 8c3fa36..d56f0b0 100644 --- a/app/src/main/java/com/dayu/pipirrapp/activity/AddIssueActivity.java +++ b/app/src/main/java/com/dayu/pipirrapp/activity/AddIssueActivity.java @@ -75,7 +75,9 @@ 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; @@ -151,7 +153,7 @@ if (!TextUtils.isEmpty(binding.contentET.getText().toString())) { if (isAllPost) { - if (uplodFileStates.size() > 0) { + if (!uplodFileStates.isEmpty()) { postData(); } else { ToastUtil.showToast(AddIssueActivity.this, "璇蜂笂浼犲浘鐗�"); @@ -171,12 +173,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); @@ -262,6 +272,9 @@ Log.i(TAG, "鏂囦欢鏃堕暱: " + media.getDuration()); String compressPath = media.getCompressPath(); //鍒ゆ柇鏄惁鏈夎繖涓矾寰勶紝娌℃湁鐨勮瘽涓婁紶璇ュ浘鐗囧苟娣诲姞uplodFileStates涓� + if (TextUtils.isEmpty(compressPath)) { + compressPath = media.getRealPath(); + } if (!existingPaths.contains(compressPath)) { UplodFileState uplodFileState = new UplodFileState(); uplodFileState.setFilePath(compressPath); @@ -305,12 +318,10 @@ //涓婁紶鍥剧墖 private void uplodeImg(UplodFileState uplodFileState) { - ApiManager.getInstance().uploadFile(this, uplodFileState, new UploadFileListener() { - @Override - public void onBack(UplodFileState state) { - uplodFileStates.replace(state.getFilePath(), state); - mAdapter.updateProgress(uplodFileState); - } + ApiManager.getInstance().uploadFile(this, uplodFileState, state -> { + + uplodFileStates.replace(state.getFilePath(), state); + mAdapter.updateProgress(uplodFileState); }, mAdapter); } diff --git a/app/src/main/java/com/dayu/pipirrapp/adapter/AddPictureAdapter.java b/app/src/main/java/com/dayu/pipirrapp/adapter/AddPictureAdapter.java index b30b0fa..71b52a3 100644 --- a/app/src/main/java/com/dayu/pipirrapp/adapter/AddPictureAdapter.java +++ b/app/src/main/java/com/dayu/pipirrapp/adapter/AddPictureAdapter.java @@ -2,6 +2,7 @@ import android.content.Context; import android.net.Uri; +import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -44,7 +45,7 @@ private final ArrayList<LocalMedia> list = new ArrayList<>(); Map<String, UplodFileState> fileStates; private int selectMax = 9; - private Context mContext; + private final Context mContext; public AddPictureAdapter(Context context, List<LocalMedia> result, Map<String, UplodFileState> fileStates) { @@ -162,26 +163,38 @@ } // 鏇存柊杩涘害 - UplodFileState uplodFileState = fileStates.get(media.getCompressPath()); - uplodFileState.setAdapterPosition(position); - MyLog.d("progressRequestBodyHolder>>>" + "State:" + uplodFileState.getState() + ">>>position:" + position + ">>>Progress: " + uplodFileState.getProgress()); - - if (uplodFileState.getState() == UplodFileState.STATE_UPDING) { - if (uplodFileState.getProgress() < 100) { - viewHolder.maskLayerBg.setVisibility(View.VISIBLE); - viewHolder.circleProgressView.setVisibility(View.VISIBLE); - viewHolder.circleProgressView.setProgress(uplodFileState.getProgress()); - - } else { - viewHolder.circleProgressView.setVisibility(View.GONE); - viewHolder.maskLayerBg.setVisibility(View.GONE); - } - } else if (fileStates.get(media.getCompressPath()).getState() == UplodFileState.STATE_DONE) { - viewHolder.maskLayerBg.setVisibility(View.GONE); - viewHolder.circleProgressView.setVisibility(View.GONE); + UplodFileState uplodFileState; + if (TextUtils.isEmpty(media.getCompressPath())) { + uplodFileState = fileStates.get(media.getRealPath()); } else { - viewHolder.maskLayerBg.setVisibility(View.VISIBLE); + uplodFileState = fileStates.get(media.getCompressPath()); } + + + if (uplodFileState != null) { + uplodFileState.setAdapterPosition(position); + MyLog.d("progressRequestBodyHolder>>>" + "State:" + uplodFileState.getState() + ">>>position:" + position + ">>>Progress: " + uplodFileState.getProgress()); + + if (uplodFileState.getState() == UplodFileState.STATE_UPDING) { + if (uplodFileState.getProgress() < 100) { + viewHolder.maskLayerBg.setVisibility(View.VISIBLE); + viewHolder.circleProgressView.setVisibility(View.VISIBLE); + viewHolder.circleProgressView.setProgress(uplodFileState.getProgress()); + + } else { + viewHolder.circleProgressView.setVisibility(View.GONE); + viewHolder.maskLayerBg.setVisibility(View.GONE); + } + } else if (fileStates.get(media.getCompressPath()).getState() == UplodFileState.STATE_DONE) { + viewHolder.maskLayerBg.setVisibility(View.GONE); + viewHolder.circleProgressView.setVisibility(View.GONE); + } else { + viewHolder.maskLayerBg.setVisibility(View.VISIBLE); + viewHolder.postError.setVisibility(View.VISIBLE); + viewHolder.circleProgressView.setVisibility(View.GONE); + } + } + //itemView 鐨勭偣鍑讳簨浠� if (mItemClickListener != null) { @@ -211,7 +224,7 @@ // 鏇存柊杩涘害鍙傛暟 if (fileStates.containsKey(uplodFileState.getFilePath())) { - if (uplodFileState.getState()==0){ + if (uplodFileState.getState() == 0) { // 鑾峰彇宸叉湁鐨� UplodFileState 瀵硅薄骞舵洿鏂拌繘搴� UplodFileState existingState = fileStates.get(uplodFileState.getFilePath()); existingState.setProgress(uplodFileState.getProgress()); // 鏇存柊杩涘害 @@ -221,7 +234,7 @@ // 閫氱煡閫傞厤鍣ㄥ埛鏂版寚瀹氫綅缃殑椤� notifyItemChanged(position); } - }else if (uplodFileState.getState()==2){ + } else if (uplodFileState.getState() == 2) { } @@ -294,8 +307,8 @@ mIvDel = view.findViewById(R.id.iv_del); tvDuration = view.findViewById(R.id.tv_duration); circleProgressView = view.findViewById(R.id.cpv); - maskLayerBg=view.findViewById(R.id.mask_layer_bg); - postError=view.findViewById(R.id.postError); + maskLayerBg = view.findViewById(R.id.mask_layer_bg); + postError = view.findViewById(R.id.postError); } } diff --git a/app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java b/app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java index d0d399a..b040919 100644 --- a/app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java +++ b/app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java @@ -18,8 +18,6 @@ import com.dayu.pipirrapp.net.subscribers.CodeListener; import com.dayu.pipirrapp.net.subscribers.ProgressSubscriber; import com.dayu.pipirrapp.net.subscribers.SubscriberListener; -import com.dayu.pipirrapp.net.upload.IMGProgressLisener; -import com.dayu.pipirrapp.net.upload.ProgressListener; import com.dayu.pipirrapp.net.upload.ProgressRequestBody; import com.dayu.pipirrapp.net.upload.UploadFileListener; import com.dayu.pipirrapp.utils.CleanDataUtils; @@ -27,7 +25,6 @@ import com.dayu.pipirrapp.utils.MyJsonParser; import com.dayu.pipirrapp.utils.MyLog; import com.dayu.pipirrapp.utils.NetUtils; -import com.google.gson.Gson; import com.google.gson.internal.LinkedTreeMap; import java.io.File; @@ -65,7 +62,7 @@ ApiService apiService; // 绠$悊璁㈤槄浜嬩欢 - private CompositeDisposable compositeDisposable = new CompositeDisposable(); + private final CompositeDisposable compositeDisposable = new CompositeDisposable(); /** * 鍒濆鍖栭�氫俊妗嗘灦 @@ -148,9 +145,9 @@ } BaseResponse<T> response = new BaseResponse<>(); response.setCode(tem.getCode()); - if (!TextUtils.isEmpty(tem.getMsg())){ + if (!TextUtils.isEmpty(tem.getMsg())) { response.setMsg(tem.getMsg()); - }else { + } else { response.setMsg(""); } @@ -300,60 +297,67 @@ * @param listener */ public void uploadFile(final Context context, final UplodFileState uplodData, final UploadFileListener listener, final AddPictureAdapter adapter) { - MyLog.d("progressRequestBody>>>" + "path:" + uplodData.getFilePath() ); - File file = new File(uplodData.getFilePath()); - RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file); - ProgressRequestBody progressRequestBody = new ProgressRequestBody(requestBody, (bytesWritten, contentLength, done) -> { + MyLog.d("progressRequestBody>>>" + "path:" + uplodData.getFilePath()); + if (!TextUtils.isEmpty(uplodData.getFilePath())) { + File file = new File(uplodData.getFilePath()); + RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file); + ProgressRequestBody progressRequestBody = new ProgressRequestBody(requestBody, (bytesWritten, contentLength, done) -> { // MyLog.d("progressRequestBody>>>" + "bytesWritten:" + bytesWritten + ">>>contentLength: " + contentLength ); - // 鏇存柊杩涘害鏉℃垨杩涜鍏朵粬鎿嶄綔 - int progress = (int) (100 * bytesWritten / contentLength); - // 渚嬪锛氭洿鏂� ProgressBar 鎴栨樉绀鸿繘搴� - runOnUiThread(() -> { - uplodData.setProgress(progress); - // 杩涘害鏉℃洿鏂颁唬鐮� - if (adapter != null && uplodData.getAdapterPosition() != -1) { - adapter.updateProgress(uplodData); - } - MyLog.d("progressRequestBody>>>" + "adapterPosition:" + uplodData.getAdapterPosition() + ">>>涓婁紶杩涘害: " + progress + "%"); - }); + // 鏇存柊杩涘害鏉℃垨杩涜鍏朵粬鎿嶄綔 + int progress = (int) (100 * bytesWritten / contentLength); + // 渚嬪锛氭洿鏂� ProgressBar 鎴栨樉绀鸿繘搴� + runOnUiThread(() -> { + uplodData.setProgress(progress); + // 杩涘害鏉℃洿鏂颁唬鐮� + if (adapter != null && uplodData.getAdapterPosition() != -1) { + adapter.updateProgress(uplodData); + } + MyLog.d("progressRequestBody>>>" + "adapterPosition:" + uplodData.getAdapterPosition() + ">>>涓婁紶杩涘害: " + progress + "%"); + }); - }); - MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), progressRequestBody); - RequestBody description = RequestBody.create(MediaType.parse("text/plain"), "file description"); - Call<BaseResponse> uploadFile = apiService.uploadFile(body, description); - uplodData.setThisCall(uploadFile); - uploadFile.enqueue(new Callback<BaseResponse>() { - @Override - public void onResponse(Call<BaseResponse> call, Response<BaseResponse> response) { - if (response.body() != null) { - if (response.body().isSuccess()) { - uplodData.setState(1); - uplodData.setPostId(((LinkedTreeMap) response.body().getContent()).get("id").toString()); - uplodData.setWebPath(((LinkedTreeMap) response.body().getContent()).get("webPath").toString()); - listener.onBack(uplodData); - } else { - if (uplodData.getNumber() <= uplodFilerepeatSize) { - uplodData.setNumber(uplodData.getNumber() + 1); - uplodData.setState(2); - uploadFile(context, uplodData, listener, adapter); - } else { + }); + MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), progressRequestBody); + RequestBody description = RequestBody.create(MediaType.parse("text/plain"), "file description"); + Call<BaseResponse> uploadFile = apiService.uploadFile(body, description); + uplodData.setThisCall(uploadFile); + uploadFile.enqueue(new Callback<BaseResponse>() { + @Override + public void onResponse(Call<BaseResponse> call, Response<BaseResponse> response) { + if (response.body() != null) { + if (response.body().isSuccess()) { + uplodData.setState(1); + uplodData.setPostId(((LinkedTreeMap) response.body().getContent()).get("id").toString()); + uplodData.setWebPath(((LinkedTreeMap) response.body().getContent()).get("webPath").toString()); listener.onBack(uplodData); + } else { + if (uplodData.getNumber() <= uplodFilerepeatSize) { + uplodData.setNumber(uplodData.getNumber() + 1); + uplodData.setState(2); + uploadFile(context, uplodData, listener, adapter); + } else { + listener.onBack(uplodData); + } } } } - } - @Override - public void onFailure(Call<BaseResponse> call, Throwable t) { - if (uplodData.getNumber() <= uplodFilerepeatSize) { - uplodData.setNumber(uplodData.getNumber() + 1); - uplodData.setState(2); - uploadFile(context, uplodData, listener, adapter); - } else { - listener.onBack(uplodData); + @Override + public void onFailure(Call<BaseResponse> call, Throwable t) { + MyLog.d("progressRequestBody>>>" + "onFailure:"); + if (uplodData.getNumber() <= uplodFilerepeatSize) { + uplodData.setNumber(uplodData.getNumber() + 1); + uplodData.setState(2); + uploadFile(context, uplodData, listener, adapter); + } else { + listener.onBack(uplodData); + } } - } - }); + }); + } else { + uplodData.setState(UplodFileState.STATE_ERROR); + listener.onBack(uplodData); + } + } diff --git a/app/src/main/java/com/dayu/pipirrapp/net/RetrofitClient.java b/app/src/main/java/com/dayu/pipirrapp/net/RetrofitClient.java index 3d4cdc6..fada46d 100644 --- a/app/src/main/java/com/dayu/pipirrapp/net/RetrofitClient.java +++ b/app/src/main/java/com/dayu/pipirrapp/net/RetrofitClient.java @@ -17,7 +17,7 @@ public class RetrofitClient { private static RetrofitClient mInstance; - private Retrofit retrofit; + private final Retrofit retrofit; private static final int READ_TIME_OUT = 10; private static final int CONNECT_TIME_OUT = 10; @@ -36,7 +36,7 @@ //娣诲姞鏃ュ織鎷︽埅鍣� //娣诲姞鏁版嵁璇锋眰缁熶竴澶勭悊鎷︽埅鍣� // if (BuildConfig.DEBUG) { -// builder.addInterceptor(loggingInterceptor); + builder.addInterceptor(loggingInterceptor); // } OkHttpClient client = builder.build(); -- Gitblit v1.8.0