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