(二)项目实战之图片上传大小为0异常处理

在线上APK项目中,出现手机端图片清晰正常,图片上传之后大小为0异常无法查看,问题出现概率很低。偶现在金立的某个型号的手机出现。

针对这个异常问题进行分析处理,使用问题机型进行测试与异常验证

1.问题出现途径:图库选择 or 拍照图片上传出现的问题?

       实际操作验证我们先从图库选择开始图片上传之后,图片显示正常排除图库问题,所有出现第二个疑虑。

2.为什么手机拍照之后查看图片却正常显示?

针对这样疑虑进行拍照断点跟踪,上传时图片的大小并不为0,上传正常后台显示也正常。但是当我们把断点去除之后运行,问题又出现了。惊到我了^_^。加log日志,再次拍照上传日志记录显示文件存在但文件大小为0。

分析处理:查看拍照代码,先创建一个空文件,调用系统拍照功能,让拍照数据输出到指定文件中。

 /**
     * Open camera
     */
    private void showCameraAction() {


        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (intent.resolveActivity(getActivity().getPackageManager()) != null) {
            try {
                mTmpFile = FileUtils.createTmpFile(getActivity());
            } catch (IOException e) {
                e.printStackTrace();
            }
            if (mTmpFile != null && mTmpFile.exists()) {
                intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mTmpFile));
                startActivityForResult(intent, REQUEST_CAMERA);
            } else {
                Toast.makeText(getActivity(), R.string.mis_error_image_not_exist, Toast.LENGTH_SHORT).show();
            }
        } else {
            Toast.makeText(getActivity(), R.string.mis_msg_no_camera, Toast.LENGTH_SHORT).show();
        }

    }

问题就出现在“系统把拍照之后数据输出到指定文件中”,因为国产手机多android原生系统定制修改原因。出现某些机型拍照之后把没有及时把数据写入文件中,导致本机查看图片正常,上传图片大小为0问题。那我们是否可等待数据写完之后再上传呢,答案是可以的。

解决方案是在图片上传的线程中让当前上传线程等待一会,等待次数加文件大小作为判断条件, 条件满足再上传图片文件。等待代码如下

   private File call() throws IOException {

            // 压缩文件
            if (this.oldFile == null || !this.oldFile.exists()) {
                return this.oldFile;
            }

            while (this.oldFile.length() <= 0 && waitSize < 15) {
                try {
                    waitSize++;
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

测试验证之后,问题解决。上线更新之后类似问题也没在出现过。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值