当心空指针异常——将头像存储到T_User用户信息表里

来源:互联网 发布:淘宝发布定制产品 编辑:程序博客网 时间:2024/05/21 16:22

写在前面的话:

    找工作已经告一段落,整天无所事事找不到目标的日子也被涪陵之行治愈,现在的我只剩下满满的正能量!吼吼,俺要努力做课题,为毕设做准备啦!一想到明年就能自食其力了就开心,钱钱啊~嘿嘿~

    暑假的时候,为了找工作能更好地演示我的APP,特意对软件进行了代码调整,也就是只能看,不能用(不能实现检测的功能呢),于是乎,俺重拾课题的第一步自然就必须得把APP的代码改过来,还我娃本来面貌,哈哈!

正文分割线----------------------------------------------------------------------------------------------

【功能】将头像统一存储到T_User表里,并能查询显示在界面

 1.旧功能陈述

   因为App是分阶段开发的,很久很久以前还没有统一创建SQLite数据库,基本是需要用到什么表和字段就现创建,后来一想不行啊,于是就本着程序员对规范代码的追求开始设计整个APP系统的数据库和表。But,由于当时时间紧,任务重,俺只得让“头像”这块儿较复杂的数据还是存在原始时代创建的数据表里,那么:

   存储头像图片就用了下面这句代码:

   

  其中,将Bitmap格式的图片转换为byte[]类型,然后存入SQlite数据库(blob类型)时的代码如下:


此时,在DIalogFragment查询数据库中的头像数据,然后设置到界面上的代码如下:


这样做的缺点是:所有的数据库表都统一了,唯独这个表  My_UserInfo 无法跟注册用户信息关联在一起。这是要出问题的哇!

2.新功能实现

  整改后的数据存储都是借助数据库工具类,对封装类对象的存储。

  例如对User用户数据的存储是基于UserInfo这个对象类,里面包含了姓名、电话号码、密码、头像等字段。具体代码如下:


  这其中,针对头像问题,做了如下修改:

  1)将原来Image类型的头像改为Bitmap类型,并设置get和set方法


 2)在反序列化部分加入对头像操作的语句


 3)在序列化部分加入对头像操作的语句

 

 接下来要在数据库帮助类UserDbUtil类中对添加用户数据、查询用户数据的方法进行修改,以包含头像部分

该工具类的整体代码如图所示:


   一切调整完毕,下载一运行,。。。。运行停止!

  看logcat信息显示是空指针异常,定位了半天,原来是这里代码有误啊


   这里,完全没有考虑user.getHeadImage()就可能为null的情况,造成了headimg(Bitmap bm)空指针。找到问题,改就容易了:


--------------------------------------------------------------------------------------

    心里想,这下该好了吧。添加健康档案,一提交,啪,运行又停止了。一看logcat,还是空指针!

    心里万马奔腾啊!尼玛,不就是两三个月没编程了吗,至于搞成这样,连续两处空指针!亏得我准备面试,编小程序的时候,还每次就预防着空指针呢,怎么到了项目上,真实一点儿没发现呢。赶紧查!

   看吧,是在登录时获取头像信息没检查空指针:

  

  没看出来,好吧,非得让我暴露得彻彻底底的。

 

  看什么,赶紧改吧,说多了都是泪啊!

  修改后的代码如下:

    

   至此,终于把这个小功能的空指针异常给改完了!吸取教训,这人啊,往往死在最不起眼的细节上面,说的就是我们这些苦逼的程序员,尤其是正在进阶中的程序员!共勉啊!




0 0
原创粉丝点击