安卓题

A Resources$NotFoundException
B ViewRootImpl$CalledFromWrongThreadException
C NullPointerException
D 运行正常,mTextViewUser组件上显示内容为10

 

 这里两个错误
分别报NullPointerException  ViewRootImpl$CalledFromWrongThreadException

错误1先执行  错误2是在非UIthread更新 界面

setContentView(R.layout.activity_class_main); 做了什么?

 

 

报的错是:Resources$NotFoundException,资源找不到;

由于上面的Demo代码量比较小,所以很容易定位出问题的出处,显然是setText()时传入的值有问题。那如果代码量很大呢,那找起来可就不容易了。

分析问题
为什么在编译的时候会出错但传值的时候没有报错呢?根据刚开始的提示,你应该明白了吧。原因是setText()时候是可以传入int类型的。

/**
 * Sets the text to be displayed using a string resource identifier.
 *
 * @param resid the resource identifier of the string resource to be displayed
 *
 * @see #setText(CharSequence)
 *
 * @attr ref android.R.styleable#TextView_text
 */
@android.view.RemotableViewMethod
public final void setText(@StringRes int resid) {
    setText(getContext().getResources().getText(resid));
    mTextFromResource = true;
}


这是setText(int resid)源码,报错的原因是因为我们传入的Int值并不是用@ResourceRes注解的,这个注解的意思是资源类型文件。而我们传入的mValue值根本不是一个资源Id,所以在运行的时候是找不到对应的资源文件的,所以就会报错了。

解决方法
在写对应的Bean文件的时候把int型的都定义成String类型的;

setText()时用String.valueOf()进行类型转换
--------------------- 
作者:零下0814 
来源:CSDN 
原文:https://blog.csdn.net/ChrisSen/article/details/79820840 
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值