- 浏览: 124266 次
- 性别:
- 来自: 福州
文章分类
最新评论
-
JavaEEdyc:
http://m.qianka.com/shoutu?u=21 ...
关于anroid设置webview背景方法探讨 -
JavaEEdyc:
http://m.qianka.com/shoutu?u=21 ...
android中的webview 加载html,并可以实现java调用js -
JavaEEdyc:
http://m.qianka.com/shoutu?u=21 ...
android ScrollView 与listView共存冲突问题解决方法(附图) -
zhangyang5023637:
讲的挺明白的。
android中的webview 加载html,并可以实现java调用js -
JavaEEdyc:
android中的webview 加载html,并可以实现ja ...
关于anroid设置webview背景方法探讨
Handler Only the original thread that created a view hierarchy can touch its vi
- 博客分类:
- android
错误例子:这里使用的Barprogress 在结束后就会报异常,因为我们把控件放在了子线程中了。
package com.funo.cicerone;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
public class HandlerActivity extends Activity {
private TextView text = null;
private Button button = null;
private ProgressBar bar = null;
private MyHandler myHandler;
private MyThread m = new MyThread();
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.handle_activity);
text = (TextView) findViewById(R.id.text);
button = (Button) findViewById(R.id.button);
bar = (ProgressBar) findViewById(R.id.bar);
bar.setMax(100);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
myHandler = new MyHandler();
new Thread(m).start();
System.out.println("onCreate--The Thread is: "
+ Thread.currentThread().getId());
}
});
}
// 执行接收到的通知,此时执行的顺序是按照队列进行,即先进先出
class MyHandler extends Handler {
public MyHandler() {
}
public MyHandler(Looper l) {
super(l);
}
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
System.out.println("Handler--The ThreadId is: "
+ Thread.currentThread().getId());
Bundle b = msg.getData();
String textStr1 = text.getText().toString();
String textStr2 = b.getString("textStr");
System.out.println(textStr1 + "..." + textStr2 + ".......");
HandlerActivity.this.text.setText(textStr1 + " " + textStr2);// 更改TextView中的值
int barValue = b.getInt("barValue");
System.out.println(barValue + "....barValue...");
HandlerActivity.this.bar.setProgress(barValue);// 更改进度条当中的值
System.out.println(msg.what + "...msg.what...");
super.handleMessage(msg);
}
}
class MyThread implements Runnable {
int i = 1;
@Override
public void run() {
// TODO Auto-generated method stub
while (i < 11) {
System.out.println("Thread--The ThreadId is: "
+ Thread.currentThread().getId());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Message msg = new Message();
Bundle b = new Bundle();
b.putString("textStr", "线程运行" + i + "次");
b.putInt("barValue", i * 10);
i++;
msg.setData(b);
HandlerActivity.this.myHandler.sendMessage(msg);// 通过sendMessage向Handler发送更新UI的消息
}
//在这里要消除ProgressBar 会报异常。
bar.setVisibility(View.GONE);
}
}
}
异常:
03-16 09:32:32.314: ERROR/AndroidRuntime(21751): FATAL EXCEPTION: Thread-8
03-16 09:32:32.314: ERROR/AndroidRuntime(21751): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
03-16 09:32:32.314: ERROR/AndroidRuntime(21751): at android.view.ViewRoot.checkThread(ViewRoot.java:2802)
03-16 09:32:32.314: ERROR/AndroidRuntime(21751): at android.view.ViewRoot.requestLayout(ViewRoot.java:594)
03-16 09:32:32.314: ERROR/AndroidRuntime(21751): at android.view.View.requestLayout(View.java:8125)
03-16 09:32:32.314: ERROR/AndroidRuntime(21751): at android.view.View.requestLayout(View.java:8125)
03-16 09:32:32.314: ERROR/AndroidRuntime(21751): at android.view.View.requestLayout(View.java:8125)
03-16 09:32:32.314: ERROR/AndroidRuntime(21751): at android.view.View.requestLayout(View.java:8125)
03-16 09:32:32.314: ERROR/AndroidRuntime(21751): at android.view.View.requestLayout(View.java:8125)
03-16 09:32:32.314: ERROR/AndroidRuntime(21751): at android.view.View.setFlags(View.java:4501)
03-16 09:32:32.314: ERROR/AndroidRuntime(21751): at android.view.View.setVisibility(View.java:3030)
03-16 09:32:32.314: ERROR/AndroidRuntime(21751): at android.widget.ProgressBar.setVisibility(ProgressBar.java:767)
03-16 09:32:32.314: ERROR/AndroidRuntime(21751): at com.funo.cicerone.HandlerActivity$MyThread.run(HandlerActivity.java:144)
03-16 09:32:32.314: ERROR/AndroidRuntime(21751): at java.lang.Thread.run(Thread.java:1096)
改进下:
package com.funo.cicerone;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
public class HandlerActivity extends Activity {
private TextView text = null;
private Button button = null;
private ProgressBar bar = null;
private MyHandler myHandler;
private MyThread m = new MyThread();
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.handle_activity);
text = (TextView) findViewById(R.id.text);
button = (Button) findViewById(R.id.button);
bar = (ProgressBar) findViewById(R.id.bar);
bar.setMax(100);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
myHandler = new MyHandler();
new Thread(m).start();
System.out.println("onCreate--The Thread is: "
+ Thread.currentThread().getId());
}
});
}
// 执行接收到的通知,此时执行的顺序是按照队列进行,即先进先出
class MyHandler extends Handler {
public MyHandler() {
}
public MyHandler(Looper l) {
super(l);
}
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
System.out.println("Handler--The ThreadId is: "
+ Thread.currentThread().getId());
Bundle b = msg.getData();
String textStr1 = text.getText().toString();
String textStr2 = b.getString("textStr");
System.out.println(textStr1 + "..." + textStr2 + ".......");
HandlerActivity.this.text.setText(textStr1 + " " + textStr2);// 更改TextView中的值
int barValue = b.getInt("barValue");
System.out.println(barValue + "....barValue...");
System.out.println(msg.what + "...msg.what...");
switch (barValue) {
case 10:
HandlerActivity.this.bar.setProgress(barValue);// 更改进度条当中的值
break;
case 20:
HandlerActivity.this.bar.setProgress(barValue);// 更改进度条当中的值
break;
case 30:
HandlerActivity.this.bar.setProgress(barValue);// 更改进度条当中的值
break;
case 40:
HandlerActivity.this.bar.setProgress(barValue);// 更改进度条当中的值
break;
case 50:
HandlerActivity.this.bar.setProgress(barValue);// 更改进度条当中的值
break;
case 60:
HandlerActivity.this.bar.setProgress(barValue);// 更改进度条当中的值
break;
case 70:
HandlerActivity.this.bar.setProgress(barValue);// 更改进度条当中的值
break;
case 80:
HandlerActivity.this.bar.setProgress(barValue);// 更改进度条当中的值
break;
case 90:
HandlerActivity.this.bar.setProgress(barValue);// 更改进度条当中的值
break;
case 100:
HandlerActivity.this.bar.setVisibility(View.INVISIBLE);
}
super.handleMessage(msg);
}
}
class MyThread implements Runnable {
int i = 1;
@Override
public void run() {
// TODO Auto-generated method stub
while (i < 11) {
System.out.println("Thread--The ThreadId is: "
+ Thread.currentThread().getId());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Message msg = new Message();
Bundle b = new Bundle();
b.putString("textStr", "线程运行" + i + "次");
b.putInt("barValue", i * 10);
i++;
msg.setData(b);
HandlerActivity.this.myHandler.sendMessage(msg);// 通过sendMessage向Handler发送更新UI的消息
}
// bar.setVisibility(View.GONE);
}
}
}
发表评论
-
android微信摇一摇功能
2014-12-12 14:22 1519直接看代码 1:配置文件activity_main.xml & ... -
Android 返回键连续点击两次退出应用
2014-12-11 11:06 8731返回键连续点击两次退出应用,一般大家都是使用时间差来实现功能, ... -
android中getX(),getY() 与getRawX(),getRawY()分析
2014-12-09 12:13 3601[b]先看getX(),getY()源码解释 /** ... -
android ScrollView 与listView共存冲突问题解决方法(附图)
2013-05-12 16:18 7932[list] [*] [size=medium] 最近因 ... -
关于anroid设置webview背景方法探讨
2012-11-01 11:33 19635[b]最近的项目中一直关于webView设置背景色问题在研究, ... -
html5在android搭建滚动条
2012-04-26 23:33 3352最近的项目中出现类似IOS滚动条的效果。我们知道在html 中 ... -
css,img,url
2012-04-26 23:12 1899最近在做html5 android手机客户的开发,一个很简单的 ... -
HTML5和android等开发平台的使用及搭建环境
2012-04-23 00:05 1603对HTML5期待很久了,今天有时间也有机会接触一下了,和以前的 ... -
android webview WebViewClient
2012-04-17 23:33 3412最近两天一直在做一个网页连续测试的例子,循环统计各个页面的从向 ... -
android 面试题
2012-03-14 23:07 2156什么是Activity? 请描述一下Activ ... -
android webService
2012-03-14 22:43 1270找到几篇在android中使用webservice的文章,觉得 ... -
SharedPreferences
2012-03-09 12:42 2009今天做了对SharedPreferences做了简单的测试,并 ... -
JSONObject JSONARRAY
2012-03-04 00:38 35441.最近做的一个项目中传递的数据类型是Json格式的,所以在封 ... -
youmi移动广告平台
2012-03-02 21:57 1310前段时间,对智能手机投送广告做了一个简单测试。 其实,对于这些 ... -
android 关于图片的放大,缩小,旋转功能的实现(附源码)
2012-03-02 20:51 5114package funo.com.test; import ... -
android应用UI和用户体验
2012-03-02 20:37 747Android应用UI设计和用户体验的10个要点 随着移动 ... -
android listView
2011-12-03 16:18 699在android开发中ListView是比较常用的组件,它 ...
相关推荐
Only the original thread that created a view hierarchy can touch its views 这句话的意思是:只有创建这个view的线程才能操作这个view 解决方法就是handle 1、 Handler mHandler; 2、 mHandler = new Handler();...
2.android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 3.java.lang.RuntimeException: Can't create handler inside thread ...
本文实例讲述了Android实现在子线程中更新Activity中...ERROR/AndroidRuntime(1222): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its
例如在子线程进行耗时较长的下载,等下载完成之后,再去更新UI,提示用户下载完成,直接在子线程里更新UI,会得到报错提示:Only the original thread that created a view hierarchy can touch its views。...
System.out.println("Handler-->"+Thread.currentThread().getName()); } }; @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if ...
测试Thread中使用Handler修改
such as how to write a message handler with ClassWizard, I thereafter let the source code do the talking and assume that you can figure out how the source code was created. Keep in mind that the ...
这次项目用到的主要是Handler Thread Looper,希望对这三者关系还不是很清楚的人能通过我的项目读懂,当然我也不敢保证一定能
通过异步加载的方式实现网上照片的加载,使用Thread+Handler+Message技术实现,理解其他方式通过Handler和主线程通讯的原理。
The boot.ini option /3GB was created for those cases where systems actually support greater than 2 GB of physical memory and an application can make use of it This capability allows memory intensive ...
Android中的Handler很重要,但是很简单,学好Handler很重要~
比较了handler加thread 和 AsyncTask 在处理消息的不同,详见博客 http://blog.csdn.net/renlei0109/article/details/39524463
on a curve by the distance from the original point on the perimeter. - ADD: Added the method TCustomProp.GetPublishedComplexProp - returns included complex flex-property by name registered through ...
If you're viewing this document online, you can click any of the topics below to link directly to that section. 1. Tutorial tips 2 2. Introducing the JavaMail API 3 3. Reviewing related ...
Handler+thread 加载网络图片,是个学习android多线程好Demo
,这个题目有点意思,对于很多人来说,可能对Thread和Handler很熟悉,主要涉及到Android的消息机制(Handler、Message、Looper、MessageQueue),详见《 从Handler.post(Runnable r)再一次梳理Android的消息机制(以及...
Demo android组件Service与Toast 第二个版本
android Handler Thread AsyncTask httpURLConnection学习的代码