注意代码之间的逻辑性(拿自己写的一段代码作为例子)

大家看一下这段代码问题出在什么地方

public Bitmap process(Bitmap curSingerBmp) {
			System.gc();
			if (mBack != null && !mBack.isRecycled()) {
				mBack.recycle();
				mBack = null;
			}
			try {
				mBack = Bitmap.createBitmap(mPhotoFrame.getWidth(),mPhotoFrame.getHeight(), Bitmap.Config.ARGB_8888);
			} catch(Exception e) {
				e.printStackTrace();
			}
			mSingerImage = curSingerBmp;
			Canvas cv = new Canvas(mBack);
			Paint p = new Paint(); 
			mLeftLength = (mBack.getWidth() - mSingerImage.getWidth()) / 2;
			mTopLenght = (mBack.getHeight() - mSingerImage.getHeight()) / 2;
			cv.drawBitmap(mPhotoFrame,0,0, p);
			cv.drawBitmap(mSingerImage,mLeftLength,mTopLenght, p);
			cv.drawBitmap(mPhotoFrame_Front,0,0, p);
			mSingerImage.recycle();
			mSingerImage = null;
			return mBack;
		}


乍一看好像也没有什么问题,你看该捕捉的异常也捕捉了。

但是各位看官,问题就是出现在这个异常捕捉上面。

大家仔细的看下面

try {
				mBack = Bitmap.createBitmap(mPhotoFrame.getWidth(),mPhotoFrame.getHeight(), Bitmap.Config.ARGB_8888);
			} catch(Exception e) {
				e.printStackTrace();
			}
			mSingerImage = curSingerBmp;
			Canvas cv = new Canvas(mBack);







虽然在创建一个Bitmap对象mBack的时候是捕捉了异常,但是代码却依然执行,

这样就会导致当mBack创建失败。

但是依然执行

Canvas cv = new Canvas(mBack);






结果就会报一个空指针的异常

所以上面的代码需要做如下的修改

try {
			mBack = Bitmap.createBitmap(mPhotoFrame.getWidth(),mPhotoFrame.getHeight(), Bitmap.Config.ARGB_8888);
                        mSingerImage = curSingerBmp;
			Canvas cv = new Canvas(mBack);








 } catch(Exception e) {e.printStackTrace();}

也就是说当程序出现了异常时候,就不要让程序继续执行正确的业务逻辑了,不然,不仅前面的异常白捕捉了,还会给我们的应用程序带来更严重的问题。

			




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值