第三个项目部分bug集

原创 2017年01月03日 16:12:05

(一)获取系统图片路径为null

参照:吴小龙同学的博客

(二)superNotCallException

出现原因:在onRestart()方法中没有调用super.Restart()

过程:这个bug是出现在绑定设备当中的,绑定设备需要同意条款,和登陆注册一样一般需要勾选一个checkbok,先同意条款才能进行后面的操作,客户的需求是默认条款未选中,当用户点击进入阅读条款后,回到界面就默认勾选了,所以我就在onRestart中写了个

 @Override
    protected void onRestart() {

        if (isRead == true) {
            mIdReadImg.setSelected(true);
        }
    }

问题就出在这,因为我粗心把super.Restart()给删掉了,与其说是粗心,不如说是没有理解,其实一直不知道这个super.Restart有什么作用,因为进入查看源码是这样的、

 protected void onRestart() {
        throw new RuntimeException("Stub!");
    }

只是抛了个异常,并没有做什么事情,所以总觉得他没用,

protected void onRestart() {
        throw new RuntimeException("Stub!");
    }

其实不是这样的,这个onRestart()调用的是framework层的代码,之所以看不到源码是因为androidStudio没有关联源码,看了这篇文章关联源码AndroidStudio关联系统源码 还是不能正常查看Restart里面的源码,总之一点是可以确定的,onRestart里面绝对不仅仅是抛了个异常,而是做了许多事情,写在framework里面,暂时无法查看

解决方式:在重写的onRestart中调用super.Restart()

  @Override
    protected void onRestart() {
        super.onRestart();
        if (isRead == true) {
            mIdReadImg.setSelected(true);
        }
    }

(三)图片二维码扫描和图片二维码识别

出现原因:为了适配6.0对zxing中的相关代码做了些许调整,在调整的过程中出现了问题,导致后面的问题

过程:由于6.0对权限做了处理,许多权限都需要动态添加,其中有一个错误就是图片二维码识别的时候出现的,由于只动态添加了照相机的权限,并没有动态添加读取sdcard的权限,而且报的错也没有明确提示是权限问题,这里耽误了些时间,还有一个问题就是识别二维码图片是遇到的


    /**
     * 获取从相册返回来的图片路径
     *
     * @param requestCode
     * @param resultCode
     */

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
        super.onActivityResult(requestCode, resultCode, intent);
        if (resultCode == RESULT_OK) {
            switch (requestCode) {
                case REQUEST_CODE:

                    String[] proj = {MediaStore.Images.Media.DATA};
                 //这里错在将intent解析成uri而不是通过    intent.getdata来获取uri
                    //Uri uri = geturi(intent);

                    // 获取选中图片的路径
                    Cursor cursor = getContentResolver().query(intent.getData(),
                            proj, null, null, null);

                    if (cursor.moveToFirst()) {

                        int column_index = cursor
                                .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                        photo_path = cursor.getString(column_index);
                        if (photo_path == null) {
                            photo_path = Utils.getAbsolutePath(getApplicationContext(),
                                    intent.getData());
                            Log.i("123path  Utils", photo_path);
                        }

                    }

                    cursor.close();
                    /**
                     * 开启线程识别
                     */
                    new Thread(new Runnable() {

                        @Override
                        public void run() {
                              /*这个result就是返回的扫描的结果*/
                            Result result = scanningImage(photo_path);
                            // String result = decode(photo_path);
                            Log.d(TAG, "=====result:" + result);
                            if (result == null) {
                                Looper.prepare();
                                Toast.makeText(getApplicationContext(), "图片格式有误", Toast.LENGTH_SHORT)
                                        .show();
                                Looper.loop();
                            } else {
                                Log.i("123result", result.toString());
                                // Log.i("123result", result.getText());
                                // 数据返回
                                String recode = recode(result.toString());
                                Intent data = new Intent();
                                data.putExtra("codedContent", recode);
                                setResult(RESULT_OK, data);
                                finish();
                            }
                        }
                    }).start();
                    break;
            }

        }

    }

代码中指出,在query方法中的第一个参数需要传入一个uri,直接通过intent.getdata获取到数据就ok,不用将intent转成uri

解决方法:直接通过intent.getData()获取uri不需要另外转换

(四)上传图片遇到的问题(base64上传url链接太长)Request uri too Large

出现原因:图片路径转成base64后,url边长,超过了限制

过程:我们的图片上传使用的是base64,post请求,将图片路径转换成base64后,路径边长,且内存变大,理论上post请求长度是不受限制的,但是如果超过一定长度还是会有问题,而且上传时间会很久

解决方案:将base64上传改成文件上传的形式就ok了

(五)调用系统相机拍照并且更新到相册

出现原因:没有搞清楚原理,逻辑错误

过程:在开启相机拍照然后拍完及时把照片更新到相册,当时百度到一篇文章,然后根据经验主义把一个创建文件的工具类拿来用,由于是工具类就没怀疑它的正确性,其实问题就出在这个工具类中,获取到的文件夹路径为空,后来省去工具类直接创建文件夹,获取的文件夹路径就不为空了

解决方案:调用系统相机拍照并更新图库的做法是
1,开启系统相机时指定MediaStore.EXTRA_OUTPUT


                Intent imageCaptureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                String rootPath = Environment.getExternalStorageDirectory().getAbsolutePath();
                String name = System.currentTimeMillis() + ".jpg";
                mImagePath = new File(rootPath + "/aihuijia/", name);
                if (!mImagePath.exists()) {
                    mImagePath.getParentFile().mkdir();
                }
                imageCaptureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mImagePath));// 设置图片输出路径
                imageCaptureIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
                startActivityForResult(imageCaptureIntent, CAMERA_CODE);

2,开启相机时,如果指定了目标uri,data就没有数据,如果没有指定uri,则data就返回有数据所以在onActivityResult中不能通过intent去取值,而是直接往相册中插入一条数据

  //往相册中插入一条数据
                MediaStore.Images.Media.insertImage(getContentResolver(), mImagePath.getAbsolutePath(), mImagePath.getName(), null);//图片插入到系统图库

3,然后发送广播,通知系统更新相册

 //发送广播,通知更新相册
            sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + mImagePath.getAbsolutePath())));//通知图库刷新

全部代码,可以直接拿来用

  • 开启相机
 String rootPath = Environment.getExternalStorageDirectory().getAbsolutePath();
                String name = System.currentTimeMillis() + ".jpg";
                mImagePath = new File(rootPath + "/aihuijia/", name);
                if (!mImagePath.exists()) {
                    mImagePath.getParentFile().mkdir();
                }
                imageCaptureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mImagePath));// 设置图片输出路径
                imageCaptureIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
                startActivityForResult(imageCaptureIntent, CAMERA_CODE);
  • 接收返回值并处理
  // 相机拍照完成后,返回图片路径
        if (requestCode == CAMERA_CODE && resultCode == RESULT_OK) {

            try {
                //往相册中插入一条数据
                MediaStore.Images.Media.insertImage(getContentResolver(), mImagePath.getAbsolutePath(), mImagePath.getName(), null);//图片插入到系统图库
            }catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            //发送广播,通知更新相册
            sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + mImagePath.getAbsolutePath())));//通知图库刷新

        }

(六)java.lang.NullPointerException: Attempt to invoke virtual method ‘java.lang.String com.zbys.courze.bean.CircleDetailEntity$UserListBean.getHeadportrait()’ on a null object reference

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.zbys.courze.bean.CircleDetailEntity$UserListBean.getHeadportrait()' on a null object reference 

这个问题是对象为空的情况下,还去通过这个空对象去调用里面的方法而产生的,比如:String headportrait = mList.get(position).getHeadportrait();

我这个mList集合是空的,还通过集合的去获取里面的Headportrait就会报这个错,解决方法就是先判断集合是否为空,不过我这里出现的原因是,我在传用户id的时候没有判断是否为0,0表示用户不存在,所以后台查不到这个用户,返回了null

总结:传id的时候记得判断是否为空或者为0,用户头像链接也是如此

(七)null容错处理

对任何一个对象都要记得做非空判断,非空判断String类型使用TextUtils包下的isEmpty()方法判断,其他类型使用==null判断,特别对象声明在全局的类中,独立的方法中使用了这个全局的对象,那么也要做非空判断的容错处理,这个问题不能轻视

版权声明:本文为博主原创文章,转载请标明出处http://blog.csdn.net/cdhahaha

第三个项目总结

光阴似箭,转眼之间,新的一月匆匆而来,2017的上半年要结束了,趁现在还算是有的空闲。稍微的总结一下这半年的工作。...

我的第三个springboot项目,servlet实现一个转盘抽奖程序

继上面第二个springboot项目后,今晚应朋友需求帮忙写个抽奖程序,想着就用springboot+servlet去发布一个服务给前端直接调用或者后端直接调用。 下面来介绍一下: 1、不错,依然需要...

第三个项目整理的 前台知识

1、判断复选框是否被选中的代码: $("input[name='planCde']").each(function(){                             if($(this...

软件缺陷的“Bug” 软件开发的投入 软件产品由哪些部分组成 软件开发模式

1.Bug: 原意:“臭虫”或者“虫子”。 现在引申:在电脑系统或者程序中隐藏的一些未被发现的缺陷。 原因如下: 1947年,计算机还是由机械式继电器和真空管驱动,有房间那么大...

网上书店(期末项目,BUG很多)

  • 2013年12月23日 11:14
  • 2.29MB
  • 下载

Web页面未完全渲染:content部分未渲染,与navbar渲染效果相同(关键词:flask/bug)

先上效果图: 很显然,content部分没有正确渲染,应该是被用来渲染navbar的函数(CSS?)渲染了。注意,这里应该是是首页index.html。同时,还注意到,404 Not Found页面...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第三个项目部分bug集
举报原因:
原因补充:

(最多只允许输入30个字)