Handler的使用3 用法

来源:互联网 发布:apache ant 1.8.4下载 编辑:程序博客网 时间:2024/05/19 05:40
package com.example.read_xml;


import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.view.Menu;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;


public class MainActivity extends Activity {

private EditText et;
private TextView tv;
private TextService service;
private Handler handler;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et = (EditText) findViewById(R.id.et_xml);
tv = (TextView) findViewById(R.id.tv_xml);

service = new TextService();

/* Handler myHandler=new Handler() {


@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
switch (msg.what) {

}
}

};*/
/*首先, 线程中, 是不能控制UI的, 这再任何操作系统, 都应该会出现问题,
要用消息控制,在线程中加消息发送, 在handlemessage中, 截获你的消息, 来更新UI*/
}


public void go(){

new Thread(){ // Android4.0后 联网操作等耗时操作不能再放到主线程中了。
public void run(){
try {
// 得到xml文件的地址  转换为字符串 去掉空字符
String path = et.getText().toString().trim();
// 访问网络 得到xml文件内容
final String text;

text = service.getText(path);
// tv.setText(text);   创建了新线程后,但是这个操作不允许在新线程中操作。解决如下

handler.post(new Runnable(){
//          post就是开个新的线程执行你想要做的事
// handler.post(Runnable) 中的Runnable 会在handler 所在的线程执行, 也就是View 所在的UI线程
@Override
public void run() {

tv.setText(text);
}});

} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(), "服务器忙", 1).show();
}


}
}.start();







}
}
0 0
原创粉丝点击