学习Android的Intent时候跟着Mars老师做简单的乘法程序,在第一个activity输入两个正整数,通过一个intent跳转到第二个intent,在第二个activity中使用一个TextView的setText()方法显示乘法计算的结果,很简单是吧。
run as android application之后,第一个activity没有问题,可是一旦点击了计算的button,立马崩溃(unfortunately,...has stopped!)
DDMS里面报错:
08-27 06:16:08.517: W/EGL_genymotion(1239): eglSurfaceAttrib not implemented
谷歌查了下,主要是Androidmanifest里面没有注册或者是genymotion自身的问题,有人说使用自带模拟器,勾选use host gpu就可以,试之,继续错误。无奈掏出平板调试,继续错。。。。。基本上一个下午就在找这个错误,时间都浪费了。
这个时候突然在DDMS里面看到一段话:
No package identifier when getting value for resource number 0x00000002
终于给我查到了,Android异常,
原来第二个activity里面的TextView在调用setText()方法的时候出问题了
更改之前:
txtresult.setText(resultnum);;
更改之后:
txtresult.setText(String.valueOf(resultnum));;
原理我直接照搬别人的了:
主要原因是TextView的setText方法把传入的int类型的percent当做资源Id到项目中查询资源,而资源中却找不到相应的数值,就会报NotFoundException的错误。
在Android中利用id来索引资源的地方很多(如:Toast.makeText()等),所以如果不小心往方法中传入int类型的参数,虽然编译时IDE不会报错,但是运行时,很容易因找不到对应的资源而报错。
解决办法:
所以如果要在TextView中显示int类型的数据,应提前转换成字符串类型。如:
完事。