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