CalledFromWrongThreadException: Only the original thread that created a view

    初遇这问题,不知道因为啥,所以问了一下度娘,知道了这句英文的意思:只能在原来的线程中创建view。实际上就是只能在主线程上创建view,或对UI进行更新,可是还是不  明白,因为我是在主线程中更新的啊,后来经过せんせい的指导,终于发现了问题,因为我更新UI是在回调接口里面,而回调是写在一个子线程里面,这才明白了错误的原因,而  且明白了:在子线程中执行回调函数,虽然跳出了子线程,但之后的操作任然属于子线程! 

 既然明白了为题所在,就要解决问题了,

 要想控制主线程改变view,必须得以主线程的身份。如何让主线程知道要改变它呢,就要用到Handler类了。

  

	private Handler mHandler = new Handler() {
		public void handleMessage(android.os.Message msg) {
			name.setText(msg.obj.toString());
		};
	};

之后在回调函数的调用方及主线程中调用mHandler让主线程View做出改变

		Message message = new Message();
		message.obj = user.uName;
		mHandler.sendMessage(message);

还有一种Android独有的方法runOnUiThread ,它也能在线程中执行UI更新操作

实现如下:

		runOnUiThread(new Runnable() {

			@Override
			public void run() {
				name.setText(user.uName);
			}
		});


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值