管灌系统巡查员智能手机App
zuoxiao
2025-01-02 51e977ecf8b086b5402271486fb87c2f57d641f2
添加视频上传的部分功能
4个文件已修改
200 ■■■■■ 已修改文件
app/src/main/java/com/dayu/pipirrapp/activity/AddIssueActivity.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/adapter/AddPictureAdapter.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java 108 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/net/RetrofitClient.java 4 ●●●● 补丁 | 查看 | 原始文档 | 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();