第三个项目部分bug集
来源:互联网 发布:js倒计时刷新页面 编辑:程序博客网 时间:2024/05/22 17:02
(一)获取系统图片路径为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判断,特别对象声明在全局的类中,独立的方法中使用了这个全局的对象,那么也要做非空判断的容错处理,这个问题不能轻视
- 第三个项目部分bug集
- 第三个项目总结
- Django官方教程(五)【创建你的第一个 Django 项目,第三部分】
- 第三个项目接近尾声
- Android高手速成--第三部分 优秀项目
- 项目中发现的SD卡部分的Bug
- 项目中发现的SD卡部分的Bug
- 第三个项目整理的 前台知识
- 第三个小项目 - 走迷宫
- 编写你的第一个Django应用, 第三部分
- 第三部分
- (3)前端项目AngularJS的第三部分总结
- ASIHttprequest(网络处理第三方框架)中文版 不是最新版 特别是ios5之后部分bug要修复
- 第三个第三个
- 创建Spring Boot第一个引用项目出现的Bug
- 部分和问题 算法第三集
- 项目BUG
- android部分BUG
- LWIP学习之路之编程接口
- BeanUtils拷贝问题整理
- 54. spring boot日志升级篇—logback【从零开始学Spring Boot】
- Java基础学习总结(93)——Java编码规范之代码性能及惯例
- 推荐一款基于bootstrap的漂亮的前端模板——inspinia_admin(国内翻译的叫 H+后台主题UI框架)
- 第三个项目部分bug集
- 【BZOJ 3672】[Noi2014]购票 树分治+斜率优化
- 资讯:主流开源视频编解码
- iOS 多个页面push或present,迁移到指定ViewController
- 支持scrolllistener和scrollTo的RecyclerView
- Android进程通信之Messenger&AIDL使用详解
- svn: E155004 'XX' is already locked
- MFCard:易用的信用卡支付集成类库
- LeetCode 425. Word Squares 单词平方