DownloadAndSetImageTask和SetImageTask两个类由于在子线程执行,会经常出现activity关闭后继续执行导致报错崩溃问题,修复此bug
已修改25个文件
已删除2个文件
3721 ■■■■■ 文件已修改
app/build.gradle 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/cn/flightfeather/thirdapp/activity/GitDetailActivity.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/cn/flightfeather/thirdapp/activity/PhotoViewerActivity.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/cn/flightfeather/thirdapp/activity/ProblemDetailActivity.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/cn/flightfeather/thirdapp/activity/UploadMediaFilesActivity.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/cn/flightfeather/thirdapp/adapter/CommonPagerAdapter.java 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/cn/flightfeather/thirdapp/adapter/PhotoListAdapter.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/cn/flightfeather/thirdapp/adapter/ProblemPromiseListAdapter.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/cn/flightfeather/thirdapp/fragment/HomeFragment.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/cn/flightfeather/thirdapp/fragment/InspectionFragment.java 3266 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/cn/flightfeather/thirdapp/module/base/BaseActivity.kt 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/cn/flightfeather/thirdapp/module/base/BaseTakePicActivity.kt 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/cn/flightfeather/thirdapp/module/inspection/MenuCameraActivity.kt 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/cn/flightfeather/thirdapp/module/inspection/MenuChangeActivity.kt 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/cn/flightfeather/thirdapp/module/inspection/MenuEvidenceActivity.kt 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/cn/flightfeather/thirdapp/module/inspection/MenuProblemUpdateActivity.kt 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/cn/flightfeather/thirdapp/module/inspection/MenuRecheckActivity.kt 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/cn/flightfeather/thirdapp/module/inspectioninfo/InspectionInfoFragment.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/cn/flightfeather/thirdapp/module/inspectioninfo/ProblemChangeActivity.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/cn/flightfeather/thirdapp/module/inspectioninfo/ProblemChangeDetailActivity.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/cn/flightfeather/thirdapp/repository/SceneRepository.kt 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/cn/flightfeather/thirdapp/repository/dao/SceneDao.kt 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/cn/flightfeather/thirdapp/task/DownloadAndSetImageTask.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/cn/flightfeather/thirdapp/task/SetImageTask.java 85 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/cn/flightfeather/thirdapp/util/photo/PhotoUtil.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_upload_media_files.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/fragment_inspection.xml 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/build.gradle
@@ -13,8 +13,8 @@
        applicationId "cn.flightfeather.thirdapp"
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 21
        versionName "1.1.14.04"
        versionCode 23
        versionName "1.1.14.06"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        renderscriptTargetApi 25
        renderscriptSupportModeEnabled true
app/src/main/java/cn/flightfeather/thirdapp/activity/GitDetailActivity.java
@@ -117,7 +117,7 @@
                Mediafile mediaFile = mediafileList.get(i);
                File file =getFileFromMediaFile(mediaFile);
                if (file.exists()){
                    SetImageTask task1 = new SetImageTask(file, ivPhotoList.get(i));
                    SetImageTask task1 = new SetImageTask(file, ivPhotoList.get(i), this);
                    task1.execute();
                }else {
                    DownloadAndSetImageTask task = new DownloadAndSetImageTask(mediaFile,ivPhotoList.get(i),this);
@@ -150,7 +150,7 @@
        }
        for (int i = 0;i<mediaFileList.size();i++){
            if (resetImage){
                SetImageTask task1 = new SetImageTask(getFileFromMediaFile(mediaFileList.get(i)), ivPhotoList.get(i));
                SetImageTask task1 = new SetImageTask(getFileFromMediaFile(mediaFileList.get(i)), ivPhotoList.get(i), this);
                task1.execute();
            }
            ivPhotoList.get(i).setOnClickListener(showPhotoClicker(getFilesFromMediaFile(mediaFileList),i,mediaFileList));
app/src/main/java/cn/flightfeather/thirdapp/activity/PhotoViewerActivity.java
@@ -131,7 +131,7 @@
        type = intent.getIntExtra("type",0);
        deletable = intent.getBooleanExtra("deletable",false);
        mediafiles = (List<Mediafile>) intent.getSerializableExtra(PARA_MEDIAS);
        position = intent.getIntExtra("position",-1);
        position = intent.getIntExtra("position",0);
        iv_share.setOnClickListener(this);
app/src/main/java/cn/flightfeather/thirdapp/activity/ProblemDetailActivity.java
@@ -598,7 +598,7 @@
                    //已整改的图片
                    File file = getFileFromMediaFile(mediaFile);
                    if (file.exists()){
                        SetImageTask task1 = new SetImageTask(file, imageViewChangeList.get(changeMediaFileList.size()));
                        SetImageTask task1 = new SetImageTask(file, imageViewChangeList.get(changeMediaFileList.size()), this);
                        task1.execute();
                    }else {
                        DownloadAndSetImageTask task = new DownloadAndSetImageTask(mediaFile,imageViewChangeList.get(changeMediaFileList.size()),this);
@@ -610,7 +610,7 @@
                    File file = getFileFromMediaFile(mediaFile);
                    if (file.exists()){
                        //文件本地存在直接读取显示
                        SetImageTask task1 = new SetImageTask(file, imageViewProblemList.get(problemMediaFileList.size()));
                        SetImageTask task1 = new SetImageTask(file, imageViewProblemList.get(problemMediaFileList.size()), this);
                        task1.execute();
                    }else {
                        DownloadAndSetImageTask task = new DownloadAndSetImageTask(mediaFile, imageViewProblemList.get(problemMediaFileList.size()),this);
@@ -655,14 +655,14 @@
    private void refreshPhotoAndClicker(boolean resetImage) {
        for (int i = 0; i < problemMediaFileList.size(); i++) {
            if (resetImage){
                SetImageTask task1 = new SetImageTask(getFileFromMediaFile(problemMediaFileList.get(i)), imageViewProblemList.get(i));
                SetImageTask task1 = new SetImageTask(getFileFromMediaFile(problemMediaFileList.get(i)), imageViewProblemList.get(i), this);
                task1.execute();
            }
            imageViewProblemList.get(i).setOnClickListener(showPhotoClicker(getFilesFromMediaFiles(problemMediaFileList),i,problemMediaFileList,VIEW_PROBLEM_PHOTO));
        }
        for (int i = 0; i < changeMediaFileList.size(); i++) {
            if (resetImage){
                SetImageTask task1 = new SetImageTask(getFileFromMediaFile(changeMediaFileList.get(i)), imageViewChangeList.get(i));
                SetImageTask task1 = new SetImageTask(getFileFromMediaFile(changeMediaFileList.get(i)), imageViewChangeList.get(i), this);
                task1.execute();
            }
            imageViewChangeList.get(i).setOnClickListener(showPhotoClicker(getFilesFromMediaFiles(changeMediaFileList),i,changeMediaFileList,VIEW_CHANGE_PHOTO));
app/src/main/java/cn/flightfeather/thirdapp/activity/UploadMediaFilesActivity.java
@@ -122,10 +122,11 @@
        pb_uploading.setMax(photoTotal);
        pb_uploading.setProgress(photoUploaded);
        tv_status.setText("压缩中...");
        if (uploadingDialog2 != null && !uploadingDialog2.isShowing()) {
            uploadingDialog2.show();
        } else {
        uploadingDialog2 = uploadingDialog.show();
        }
    }
    //开始上传
    public void startUplaod(List<File> outputFileList){
app/src/main/java/cn/flightfeather/thirdapp/adapter/CommonPagerAdapter.java
@@ -1,20 +1,16 @@
package cn.flightfeather.thirdapp.adapter;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import com.bm.library.PhotoView;
import com.bumptech.glide.Glide;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import cn.flightfeather.thirdapp.util.ScreenUtils;
import cn.flightfeather.thirdapp.util.photo.PhotoUtil;
/**
 * Created by hyhb01 on 2018/3/26.
@@ -57,9 +53,12 @@
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        Bitmap bm = PhotoUtil.decodeSampledBitmapFromResource(fileList.get(position).getAbsolutePath(), ScreenUtils.getScreenWidth(context), ScreenUtils.getScreenHeight(context));
        viewList.get(position).setImageBitmap(bm);
//        Bitmap bm = PhotoUtil.decodeSampledBitmapFromResource(fileList.get(position).getAbsolutePath(), ScreenUtils.getScreenWidth(context), ScreenUtils.getScreenHeight(context));
//        viewList.get(position).setImageBitmap(bm);
        Glide.with(container)
                .load(fileList.get(position))
                .into(viewList.get(position));
        container.addView(viewList.get(position));
        return viewList.get(position);
@@ -67,15 +66,15 @@
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        BitmapDrawable bitmapDrawable = (BitmapDrawable) viewList.get(position).getDrawable();
        viewList.get(position).setImageDrawable(null);
        if (bitmapDrawable != null) {
            Bitmap bitmap = bitmapDrawable.getBitmap();
            if (bitmap != null) {
                bitmap.recycle();
                System.gc();
            }
        }
//        BitmapDrawable bitmapDrawable = (BitmapDrawable) viewList.get(position).getDrawable();
//        viewList.get(position).setImageDrawable(null);
//        if (bitmapDrawable != null) {
//            Bitmap bitmap = bitmapDrawable.getBitmap();
//            if (bitmap != null) {
//                bitmap.recycle();
//                System.gc();
//            }
//        }
        container.removeView(viewList.get(position));
    }
app/src/main/java/cn/flightfeather/thirdapp/adapter/PhotoListAdapter.java
@@ -1,6 +1,6 @@
package cn.flightfeather.thirdapp.adapter;
import android.content.Context;
import android.app.Activity;
import android.os.Environment;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
@@ -24,13 +24,13 @@
public class PhotoListAdapter extends RecyclerView.Adapter<PhotoListAdapter.PhotoListHolder> {
    private List<Mediafile> mediafileList;
    private Context context;
    private Activity activity;
    private LayoutInflater layoutInflater;
    public PhotoListAdapter(List<Mediafile> mediafileList, Context context) {
    public PhotoListAdapter(List<Mediafile> mediafileList, Activity activity) {
        this.mediafileList = mediafileList;
        this.context = context;
        layoutInflater = LayoutInflater.from(context);
        this.activity = activity;
        layoutInflater = LayoutInflater.from(activity);
    }
    @Override
@@ -44,7 +44,7 @@
        Mediafile mediafile = mediafileList.get(position);
        if (mediafile.getGuid() == null) {
            Glide.with(context)
            Glide.with(activity)
                    .load(R.drawable.icon_add_photo)
                    .into(holder.iv_photo);
        } else {
@@ -56,13 +56,13 @@
//            SetImageTask task = new SetImageTask(file,holder.iv_photo);
//            task.execute();
//            String url = CommonApplication.getInstance().ROOT_URL_RELEASE_IMAGE + mediafile.getExtension1() + mediafile.getGuid() + ".jpg";
                Glide.with(context)
                Glide.with(activity)
                        .load(file)
                        .placeholder(R.drawable.icon_add_photo_waite)
                        .override(100, 100)
                        .into(holder.iv_photo);
            } else {
                DownloadAndSetImageTask task = new DownloadAndSetImageTask(mediafile, holder.iv_photo, context);
                DownloadAndSetImageTask task = new DownloadAndSetImageTask(mediafile, holder.iv_photo, activity);
                task.execute();
                Log.e("photolist", position + " no image found");
            }
app/src/main/java/cn/flightfeather/thirdapp/adapter/ProblemPromiseListAdapter.java
@@ -1,7 +1,7 @@
package cn.flightfeather.thirdapp.adapter;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.content.Context;
import android.content.Intent;
import android.os.Environment;
import android.support.v7.widget.RecyclerView;
@@ -46,7 +46,7 @@
public class ProblemPromiseListAdapter extends RecyclerView.Adapter<ProblemPromiseListAdapter.ProblemPromiseListHolder>{
    private List<ProblemlistVo> problemlistVoList;
    private Context context;
    private Activity activity;
    private LayoutInflater layoutInflater;
    private ProblemlistVo problemlistVoCurrent;
    private MediafileDao mediafileDao;
@@ -61,10 +61,10 @@
    private AllBoolean allBoolean;
    public ProblemPromiseListAdapter(List<ProblemlistVo> problemlistVoList, Context context, CommonApplication application,PromiseActivity promiseActivity,List<Mediafile> signMediaFileList, AllBoolean allBoolean) {
    public ProblemPromiseListAdapter(List<ProblemlistVo> problemlistVoList, Activity activity, CommonApplication application, PromiseActivity promiseActivity, List<Mediafile> signMediaFileList, AllBoolean allBoolean) {
        this.problemlistVoList = problemlistVoList;
        this.context = context;
        layoutInflater = LayoutInflater.from(context);
        this.activity = activity;
        layoutInflater = LayoutInflater.from(activity);
        mediafileDao = application.getDaoSession().getMediafileDao();
        this.application =application;
        this.promiseActivity = promiseActivity;
@@ -175,10 +175,10 @@
    private void setImage(Mediafile mediafile,ImageView imageView){
        File file = new File(Environment.getExternalStorageDirectory(), (mediafile.getPath() + mediafile.getDescription()));
            if (file.exists()){
                SetImageTask task1 = new SetImageTask(file,imageView);
                SetImageTask task1 = new SetImageTask(file, imageView, activity);
                task1.execute();
            }else {
                DownloadAndSetImageTask task2 = new DownloadAndSetImageTask(mediafile,imageView,context);
                DownloadAndSetImageTask task2 = new DownloadAndSetImageTask(mediafile,imageView, activity);
                task2.execute();
            }
    }
app/src/main/java/cn/flightfeather/thirdapp/fragment/HomeFragment.java
@@ -671,6 +671,7 @@
        }
        void initView() {
            if (subtask == null) return;
            tv_info.setText(subtask.getName());
            tv_address.setText(subtask.getScenseaddress());
            try {
app/src/main/java/cn/flightfeather/thirdapp/fragment/InspectionFragment.java
ÎļþÒÑɾ³ý
app/src/main/java/cn/flightfeather/thirdapp/module/base/BaseActivity.kt
@@ -12,6 +12,8 @@
import android.support.v7.widget.Toolbar
import android.view.MenuItem
import android.view.ViewGroup
import com.bumptech.glide.Glide
import com.bumptech.glide.util.Util
import io.reactivex.disposables.Disposable
import org.greenrobot.eventbus.EventBus
@@ -48,6 +50,7 @@
                it.dispose()
            }
        }
                Glide.with(applicationContext).pauseRequests()
        super.onDestroy()
    }
app/src/main/java/cn/flightfeather/thirdapp/module/base/BaseTakePicActivity.kt
@@ -12,6 +12,7 @@
import cn.flightfeather.thirdapp.util.UUIDGenerator
import cn.flightfeather.thirdapp.util.file.FileUtil
import cn.flightfeather.thirdapp.util.photo.PhotoUtil
import com.bumptech.glide.Glide
import com.lcw.library.imagepicker.ImagePicker
import org.jetbrains.anko.toast
import java.io.File
@@ -91,9 +92,11 @@
            when {
                i < picSize -> {
                    imageViewList[i].setOnClickListener(viewPhotoClickListener(i))
                    // fixme: 2019/8/2 æ­¤å¤„ç»™imageVIew设置图片在原代码中是自定义了一个AsyncTask,之后可以用Glide等第三方框架替代
                    imageViewList[i].scaleType = ImageView.ScaleType.CENTER_CROP
                    SetImageTask(pathTempList[i].first, imageViewList[i]).execute()
                    Glide.with(this)
                            .load(pathTempList[i].first)
                            .placeholder(R.drawable.icon_add_photo_waite)
                            .into(imageViewList[i])
                }
                i == picSize -> imageViewList[i].run {
                    setOnClickListener(takePhotoClickListener(i))
app/src/main/java/cn/flightfeather/thirdapp/module/inspection/MenuCameraActivity.kt
@@ -174,8 +174,7 @@
        mediaFile.iguid = inspection?.guid
        mediaFile.longitude = lng
        mediaFile.latitude = lat
        mediaFile.address = "${scene?.cityname ?: ""} + ${scene?.districtname
                ?: ""} + ${scene?.townname ?: ""} + ${scene?.location ?: ""}"
        mediaFile.address = "${scene?.cityname ?: ""}${scene?.districtname ?: ""}${scene?.townname ?: ""}${scene?.location ?: ""}"
        mediaFile.filetype = 1
        mediaFile.businesstype = currentType.des
        mediaFile.businesstypeid = currentType.value.toByte()
app/src/main/java/cn/flightfeather/thirdapp/module/inspection/MenuChangeActivity.kt
@@ -3,7 +3,6 @@
import android.arch.lifecycle.Observer
import android.os.Bundle
import cn.flightfeather.thirdapp.adapter.ProblemListAdapter
import cn.flightfeather.thirdapp.fragment.InspectionFragment
import cn.flightfeather.thirdapp.model.event.InspectionEvent
import cn.flightfeather.thirdapp.model.event.ProblemEvent
import kotlinx.android.synthetic.main.dialog_problem_list.*
app/src/main/java/cn/flightfeather/thirdapp/module/inspection/MenuEvidenceActivity.kt
@@ -158,7 +158,7 @@
            toast("当前巡查状态错误,无法上传问题,请尝试重新启动")
        }
        val problemType = sp_take_evidence_select_problem_type.selectedItem.toString()
        val problemType = sp_take_evidence_select_problem_type.selectedItem?.toString()
        val pro = Problemlist().apply {
            guid = UUIDGenerator.generate16ShortUUID()
@@ -171,26 +171,26 @@
            val p = sp_take_evidence_select_problem.selectedItem
            if (p is Problemtype) {
                ptguid = p.guid
                var problemDes = et_take_evidence_problem_des.text.toString()
                var problemDes = et_take_evidence_problem_des?.text.toString()
                if (problemDes.isNotEmpty()) {
                    problemDes = "($problemDes)"
                }
                problemname = p.name + problemDes
            }
            var adviceDes = et_take_evidence_suggestion.text.toString()
            var adviceDes = et_take_evidence_suggestion?.text.toString()
            if (adviceDes.isNotEmpty()) {
                adviceDes = "($adviceDes)"
            }
            advise = sp_take_evidence_select_suggestion.selectedItem.toString() + adviceDes
            advise = sp_take_evidence_select_suggestion.selectedItem?.toString() + adviceDes
            latitude = lat
            longitude = lng
            val l = sp_take_evidence_select_location.selectedItem
            if (l is Domainitem) {
                if (problemType != "态度") {
                    var locationRemark = et_take_evidence_location.text.toString()
                    if (locationRemark.isNotEmpty()) {
                    var locationRemark = et_take_evidence_location.text?.toString()
                    if (locationRemark?.isNotEmpty() == true) {
                        locationRemark = "($locationRemark)"
                    }
                    locationid = l.index.toByte()
app/src/main/java/cn/flightfeather/thirdapp/module/inspection/MenuProblemUpdateActivity.kt
@@ -63,10 +63,13 @@
            VIEW_PHOTO -> {
                //查看临时拍摄图片可以删除
                data?.getIntExtra("position", -1)?.let {
                    if (it > -1) {
                    val size = viewModel.mediaFileList.value?.size ?: 0
                    if (it > -1 && it < size) {
                        viewModel.mediaFileList.value?.get(it)?.let {m ->
                            deleteMediaFileList.add(m)
                        }
                    } else {
                        toast("要删除的图片不存在")
                    }
                }
            }
app/src/main/java/cn/flightfeather/thirdapp/module/inspection/MenuRecheckActivity.kt
@@ -4,7 +4,6 @@
import android.os.Bundle
import cn.flightfeather.thirdapp.adapter.ProblemListAdapter
import cn.flightfeather.thirdapp.bean.vo.ProblemlistVo
import cn.flightfeather.thirdapp.fragment.InspectionFragment
import cn.flightfeather.thirdapp.model.event.InspectionEvent
import cn.flightfeather.thirdapp.model.event.ProblemEvent
import cn.flightfeather.thirdapp.util.Constant
app/src/main/java/cn/flightfeather/thirdapp/module/inspectioninfo/InspectionInfoFragment.java
@@ -23,6 +23,7 @@
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import butterknife.BindView;
import butterknife.ButterKnife;
@@ -38,6 +39,7 @@
import cn.flightfeather.thirdapp.util.CommonUtils;
import cn.flightfeather.thirdapp.util.Constant;
import cn.flightfeather.thirdapp.util.DateFormatter;
import cn.flightfeather.thirdapp.util.Domain;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@@ -268,7 +270,7 @@
                    p.setTotalCount(p.getTotalCount() + 1 );
                    this.total_problems++;
                    //已整改问题数累加
                    if (problemlistVo.getIschanged()){
                    if (problemlistVo.getIschanged() && Objects.equals(problemlistVo.getExtension3(), Domain.CHANGE_CHECK_PASS)) {
                        p.setIsRectifiedCount(p.getIsRectifiedCount() + 1);
                        this.changed_problems++;
                    }
app/src/main/java/cn/flightfeather/thirdapp/module/inspectioninfo/ProblemChangeActivity.java
@@ -157,10 +157,12 @@
        for (int i = 0; i < problemlistVos.size(); i++) {
            ProblemlistVo problemlistVoTemp = problemlistVos.get(i);
            if (problemlistVoTemp.getIschanged()) {
                this.changedProblems.add(problemlistVoTemp);
            } else {
            if (!problemlistVoTemp.getIschanged()) {
                this.unChangedProblems.add(problemlistVoTemp);
            } else if (!Objects.equals(problemlistVoTemp.getExtension3(), Domain.CHANGE_CHECK_PASS)) {
                this.unChangedProblems.add(problemlistVoTemp);
            } else {
                this.changedProblems.add(problemlistVoTemp);
            }
        }
        tabIndicators = new ArrayList<>();
app/src/main/java/cn/flightfeather/thirdapp/module/inspectioninfo/ProblemChangeDetailActivity.java
@@ -184,7 +184,12 @@
            if (data!=null){
                int position = data.getIntExtra("position",-1);
                if (position>-1){
                    mediafileDao.deleteByKey(mediafileListChange.get(position).getGuid());
                    this.mediafileListChange.remove(position);
                    //fixme 2020/11/12 ç”±äºŽåˆ é™¤å•张图片是直接联网将服务器数据一并删除,因此当图片全部删除后,立即更新问题为未整改状态
                    if (mediafileListChange.isEmpty()) {
                        uploadProblem();
                    }
                    this.isEdited = !mediafileListChange.isEmpty();
                    initChangingPhoto(this.mediafileListChange, this.imageViewChangeList);
                    if (this.problemlistVo.getIschanged()) {
@@ -511,6 +516,13 @@
    //<editor-fold desc="点击事件">
    private void refreshProblemStatus() {
        //整改图片全删除后,问题退回未整改审核通过状态
        if (mediafileListChange.isEmpty()) {
            this.problemlistVo.setIschanged(false);//设置为未整改
            this.problemlistVo.setExtension3(Domain.PROBLEM_CHECK_PASS);
            this.problemlistVo.setChangedtime(null);
            this.problemlistVo.setChangecatalog(null);
        } else {
        this.problemlistVo.setIschanged(true);//设置为已整改
        this.problemlistVo.setExtension3(Domain.CHANGE_UNCHECKED);//设置为整改待审核
        this.problemlistVo.setChangedtime(new Date());//设置整改时间为当前时间
@@ -538,6 +550,7 @@
            this.problemlistVo.setChangecatalog(Domain.UNPROMISE_CHANGE);
        }
    }
    }
    //提交问题
    Dialog loadingDialog;
@@ -548,28 +561,7 @@
//        }
        if (this.isEdited){
             loadingDialog = DialogUtil.createLoadingDialog(this, "");
            refreshProblemStatus();
            Call<ResponseBody> updateProblemList = application.getRetrofit().create(ProblemListService.class).updateProblemList(this.problemlistVo);
            updateProblemList.enqueue(new Callback<ResponseBody>() {
                @Override
                public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                    if (response.body()!=null){
                        Toast.makeText(application, R.string.submit_success, Toast.LENGTH_LONG).show();
                        //上传问题成功后,开始上传对应的整改图片
                        upLoadPic();
                    }else if (response.errorBody()!=null){
                        Toast.makeText(application, R.string.submit_unsuccess, Toast.LENGTH_LONG).show();
                        loadingDialog.dismiss();
                    }
                }
                @Override
                public void onFailure(Call<ResponseBody> call, Throwable t) {
                    Toast.makeText(application, R.string.network_error, Toast.LENGTH_LONG).show();
                    loadingDialog.dismiss();
                }
            });
        }else {
            Toast.makeText(application, R.string.take_one_change_photo_at_least, Toast.LENGTH_SHORT).show();
        }
@@ -603,21 +595,15 @@
        }
    }
    private void upLoadPic() {
        //筛选“未上传”的图片
        List<Mediafile> mediafiles = new ArrayList<>();
        for (Mediafile m : this.mediafileListChange) {
            if (m.getRemark().equals("未上传")) {
                mediafiles.add(m);
            }
        }
        PhotoUtil photoUtil = new PhotoUtil(mediafiles.size(), application, new OnUpLoadListener() {
    private void uploadProblem() {
        refreshProblemStatus();
        Call<ResponseBody> updateProblemList = application.getRetrofit().create(ProblemListService.class).updateProblemList(this.problemlistVo);
        updateProblemList.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onSuccess() {
                Toast.makeText(application, "上传成功", Toast.LENGTH_SHORT).show();
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                if (response.body()!=null){
                    Toast.makeText(application, R.string.submit_success, Toast.LENGTH_LONG).show();
                if (loadingDialog != null && loadingDialog.isShowing()) {
                    loadingDialog.dismiss();
                }
@@ -633,21 +619,51 @@
                sendBroadcast(intent1);
                finish();
                }else if (response.errorBody()!=null){
                    Toast.makeText(application, R.string.submit_unsuccess, Toast.LENGTH_LONG).show();
                    loadingDialog.dismiss();
                }
            }
            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                Toast.makeText(application, R.string.network_error, Toast.LENGTH_LONG).show();
                loadingDialog.dismiss();
            }
        });
    }
    private void upLoadPic() {
        //筛选“未上传”的图片
        List<Mediafile> mediafiles = new ArrayList<>();
        for (Mediafile m : this.mediafileListChange) {
            if (m.getRemark().equals("未上传")) {
                mediafiles.add(m);
            }
        }
        PhotoUtil photoUtil = new PhotoUtil(mediafiles.size(), application, new OnUpLoadListener() {
            @Override
            public void onSuccess() {
                uploadProblem();
            }
            @Override
            public void onFail() {
                Toast.makeText(application, "上传失败", Toast.LENGTH_SHORT).show();
                Toast.makeText(application, "上传失败,请重试", Toast.LENGTH_SHORT).show();
                loadingDialog.dismiss();
                AlertDialog.Builder dialog = new AlertDialog.Builder(application);
                dialog.setMessage("图片上传失败,请手动上传或联系我司!");
                dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        finish();
                    }
                });
                dialog.show();
//                AlertDialog.Builder dialog = new AlertDialog.Builder(application);
//                dialog.setMessage("图片上传失败,请重试");
//                dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
//                    @Override
//                    public void onClick(DialogInterface dialogInterface, int i) {
//                        finish();
//                    }
//                });
//                dialog.show();
            }
        });
app/src/main/java/cn/flightfeather/thirdapp/repository/SceneRepository.kt
@@ -103,6 +103,7 @@
     * æ–°å¢žåœºæ™¯ä¿¡æ¯
     */
    fun putScene(scene: Scense, resultCallBack: ResultCallBack<ResponseBody>) {
        sceneDao.insert(scene)
        retrofit.create(ScenseService::class.java).putScense(scene)
                .enqueue(ResponseBodyCallBack(resultCallBack))
    }
@@ -111,6 +112,7 @@
     * æ›´æ–°åœºæ™¯ä¿¡æ¯
     */
    fun updateScene(scene: Scense, resultCallBack: ResultCallBack<ResponseBody>) {
        sceneDao.update(scene)
        retrofit.create(ScenseService::class.java).updateScense(scene)
                .enqueue(ResponseBodyCallBack(resultCallBack))
    }
@@ -119,6 +121,9 @@
     * æ‰¹é‡æ›´æ–°åœºæ™¯ä¿¡æ¯
     */
    fun updateSceneList(sceneList: ArrayList<Scense>, resultCallBack: ResultCallBack<ResponseBody>) {
        sceneList.forEach {
            sceneDao.update(it)
        }
        retrofit.create(ScenseService::class.java).updateSceneList(sceneList)
                .enqueue(ResponseBodyCallBack(resultCallBack))
    }
app/src/main/java/cn/flightfeather/thirdapp/repository/dao/SceneDao.kt
@@ -12,6 +12,10 @@
 */
class SceneDao {
    fun insert(scene: Scense) {
        DbFactory.getInstance().scenseDao.insert(scene)
    }
    /**
     * æ›´æ–°åœºæ™¯ä¿¡æ¯
     */
app/src/main/java/cn/flightfeather/thirdapp/task/DownloadAndSetImageTask.java
@@ -1,7 +1,6 @@
package cn.flightfeather.thirdapp.task;
import android.app.Activity;
import android.content.Context;
import android.os.Environment;
import android.util.Log;
import android.widget.ImageView;
@@ -36,17 +35,18 @@
    private Activity activity;
    //下载并显示图片
    public DownloadAndSetImageTask(Mediafile mediafile, ImageView imageView, Context context) {
    public DownloadAndSetImageTask(Mediafile mediafile, ImageView imageView, Activity activity) {
        this.mediafile = mediafile;
        this.imageView = imageView;
        application = (CommonApplication) context.getApplicationContext();
        this.activity = activity;
        application = (CommonApplication) activity.getApplicationContext();
    }
    //只下载
    public DownloadAndSetImageTask(Mediafile mediafile, Context context) {
    public DownloadAndSetImageTask(Mediafile mediafile, Activity activity) {
        this.mediafile = mediafile;
        application = (CommonApplication) context.getApplicationContext();
        application = (CommonApplication) activity.getApplicationContext();
        try {
            activity = (Activity) context;
            this.activity = (Activity) activity;
        } catch (Exception e) {
            e.printStackTrace();
        }
app/src/main/java/cn/flightfeather/thirdapp/task/SetImageTask.java
@@ -1,98 +1,41 @@
package cn.flightfeather.thirdapp.task;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.os.AsyncTask;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.util.Util;
import java.io.File;
import cn.flightfeather.thirdapp.R;
import cn.flightfeather.thirdapp.module.inspectioninfo.ProblemChangeDetailActivity;
/**
 * Created by note_ff_1602 on 2017/10/26.
 * è®¾ç½®å›¾ç‰‡çš„task
 *
 */
public class SetImageTask extends AsyncTask {
// FIXME: 2020/11/12 åŽŸæ¥çš„å®žçŽ°æ–¹å¼å¯èƒ½ä¼šå¯¼è‡´oom,因此修改为使用Glide来实现图片的显示。
public class SetImageTask {
    private File file;
    private ImageView miv_photo;
    private ProblemChangeDetailActivity activity;
    private Activity activity;
    public SetImageTask(File file, ImageView miv_photo, Activity activity) {
        super();
        this.file = file;
        this.miv_photo = miv_photo;
        try {
            this.activity = (ProblemChangeDetailActivity) activity;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public SetImageTask(File file, ImageView miv_photo) {
        super();
        this.file = file;
        this.miv_photo = miv_photo;
    }
    //压缩前先把图片设置为等待
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        miv_photo.setImageResource(R.drawable.icon_add_photo_waite);
    }
    //后台压缩图片
    @Override
    protected Object doInBackground(Object[] params) {
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inPreferredConfig = Bitmap.Config.RGB_565;
        Bitmap bm = BitmapFactory.decodeFile(file.getAbsolutePath(), options);
        if (bm == null) return null;
        //压缩缩略图
        Matrix matrix = new Matrix();
        matrix.setScale(0.12f, 0.12f);
        //压缩缩略图
        Bitmap bmSmall = null;
        int normalSize = 100;
        int width,height =0;
        if (bm.getWidth()>=bm.getHeight()){
            width = normalSize;
            height = normalSize*bm.getHeight()/bm.getWidth();
        }else {
            height =normalSize;
            width = normalSize*bm.getWidth()/bm.getHeight();
        }
        if (bm!=null){
            bmSmall= Bitmap.createScaledBitmap(bm,width,height,true);
//            bmSmall= Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), matrix, true);
        this.activity = activity;
        }
        return bmSmall;
    public void execute() {
        if (Util.isOnMainThread() && activity != null && !activity.isDestroyed()) {
            Glide.with(miv_photo)
                    .load(file)
                    .placeholder(R.drawable.icon_add_photo_waite)
                    .into(miv_photo);
    }
    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @Override
    protected void onPostExecute(Object o) {
        super.onPostExecute(o);
        Bitmap bmSmall = (Bitmap) o;
        if (bmSmall!=null){
            miv_photo.setImageBitmap(bmSmall);
//            if (activity != null) {
//                activity.postponeEnterTransition();
//            }
        }
    }
app/src/main/java/cn/flightfeather/thirdapp/util/photo/PhotoUtil.java
@@ -1,7 +1,6 @@
package cn.flightfeather.thirdapp.util.photo;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
@@ -65,21 +64,21 @@
     * ç»‘定ImageView和图片,本地加载或联网加载显示(针对固定数量的ImageView)
     * @param mediaFiles
     * @param imageViews
     * @param context
     * @param activity
     * @return å®žé™…加载的图片个数
     */
    public static int loadImage(List<Mediafile> mediaFiles, List<ImageView> imageViews, Context context){
    public static int loadImage(List<Mediafile> mediaFiles, List<ImageView> imageViews, Activity activity){
        if (mediaFiles!=null){
            int count = mediaFiles.size() >= imageViews.size() ? imageViews.size() : mediaFiles.size();
            int count = Math.min(mediaFiles.size(), imageViews.size());
            for (int i = 0; i < count; i++) {
                Mediafile mediaFileTmp = mediaFiles.get(i);
                File file = FileUtil.getFileFromMediaFile(mediaFileTmp);
                if (file.exists()) {
                    SetImageTask task1 = new SetImageTask(file, imageViews.get(i), (Activity) context);
                    SetImageTask task1 = new SetImageTask(file, imageViews.get(i), (Activity) activity);
                    task1.execute();
                } else {
                    DownloadAndSetImageTask task = new DownloadAndSetImageTask(mediaFileTmp, imageViews.get(i), context);
                    DownloadAndSetImageTask task = new DownloadAndSetImageTask(mediaFileTmp, imageViews.get(i), activity);
                    task.execute();
                }
            }
app/src/main/res/layout/activity_upload_media_files.xml
@@ -14,12 +14,12 @@
        android:layout_height="50dp"
        android:textColor="@color/white"
        android:text="上传"/>
    <android.support.v7.widget.RecyclerView
        android:layout_above="@id/tv_upload"
        android:id="@+id/rv_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        ></android.support.v7.widget.RecyclerView>
        android:layout_height="match_parent" />
    <android.support.v7.widget.CardView
        android:id="@+id/cv_wait"
        android:layout_width="70dp"
app/src/main/res/layout/fragment_inspection.xml
ÎļþÒÑɾ³ý