app/src/main/java/com/dayu/pipirrapp/activity/AddIssueActivity.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/dayu/pipirrapp/adapter/AddPictureAdapter.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/dayu/pipirrapp/net/RetrofitClient.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
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); } 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); } } 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); } } 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();