public class userlistactivity extends ListActivity {
Context ct = null ;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); ct = this ; new ConnectThread().start();
}
}
public class ConnectThread extends Thread{ public void run(){
pd = new ProgressDialog(ct);
pd.setMessage("连接成功 ,正在获取玩家名单");
ProgressDialog pd = new ProgressDialog(ct); pd.show();
}}
问题 : 我想 在 线程 ConnectThread 中 弹出 一个 ProgressDialog , 但 崩溃 了 ,应该 是 ProgressDialog 的 参数 错误, 请
大家帮 我 修改到可以运行 , 必须是 在 线程中 弹出这个 ProgressDialog , 尽量只修改 context 参数 ,让小弟好好明白
context 是什么 ~我 是 android 新手 , 大家 顺便帮 我 解释一下 context 有什么 用 , android 是怎么用它的~ 谢谢
更不更新没关系,我想知道context 到底是啥 , 要传什么给 progressdialog ,还有 , userlistactivity.this 是什么 。 类的this ? 还是实例的this ?
你参考一下Android的IME吧
pd = new ProgressDialog(context);
pd.setTitle("正在验证数据...");
pd.setMessage("请稍后...");
pd.show();
new Thread(new ValidationToMeetAndKey(Id, Key, context, handler))
.start();
}package com.ppmeet.thread;import com.ppmeet.http.HttpManerger;import android.content.Context;
import android.os.Handler;
import android.os.Message;/**
* class name:ValidationToMeetAndKey<BR>
* class description:Validation meeting id and key <BR>
* PS:发送数据到服务器去验证是否存在的会议id和key值并取得返回值。<BR>
*
* @version 1.00 2011/09/29
* @author CODYY)peijiangping
*/
public class ValidationToMeetAndKey implements Runnable {
private HttpManerger hm;
private String Id;
private String Key;
private Context context;
private Handler handler; /*
* (non-Javadoc)
*
* @see java.lang.Runnable#run()
*/
public ValidationToMeetAndKey(String id, String key, Context context,
Handler handler) {
hm = new HttpManerger();
this.Key = key;
this.Id = id;
this.context = context;
this.handler = handler;
} @Override
public void run() {
System.out.println("线程开始");
Message message = new Message();
String result = hm.intermessage(Id, Key, context);
message.what=1;
if (result.equals("yes")) {
message.what=1; } else if (result.equals("no")) {
message.what=0;
}
handler.sendMessage(message);
}}[code=Java]
//用来接收验证会议id和key值线程的消息,并对界面的处理。
public Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
super.handleMessage(msg);
if (msg.what == YES) {
Intent intent = new Intent(context, Live.class);
// Bundle bundle = new Bundle();
// bundle.putString("MeetID", Id);
// bundle.putString("Key", Key);
// intent.putExtras(bundle);
context.startActivity(intent);
} else if (msg.what == NO) {
ToastUtil toastUtil = new ToastUtil(context);
toastUtil.showDefultToast("会议数据错误!!").show();
}
pd.cancel();
}
};[/code]
public class Main extends Activity {
private Button btn_alert; Handler handler;//更新UI的handler
AlertDialog aDialog;//要弹出的Dialog
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
btn_alert.setOnClickListener(new btn_alert_OnClickListener()); } private void init() {
btn_alert = (Button) findViewById(R.id.btn_alert);
handler=new myHandler();
}
/**
* 多线程中弹出Alert
*/
private class btn_alert_OnClickListener implements OnClickListener {
@Override
public void onClick(View v) {
Thread thread = new Thread(runnable);
thread.start();
}
};
Runnable runnable = new Runnable() {
@Override
public void run() {
//要传递的消息,可以捆绑线程中的数据进行发送
Message message=new Message();
message.arg1=100;
handler.sendMessage(message);
}
};
//继承了Handler类,用myHandler的对象来更新UI
private class myHandler extends Handler{
@Override
public void handleMessage(Message msg) {
aDialog=new AlertDialog.Builder(Main.this).setTitle("多线程弹出").setMessage("主线程中的数据:msg.arg1="+msg.arg1)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).show();
super.handleMessage(msg);
}
}
}
然后你就没有办法在线程中弹出Alert了
我个人一直是认为只能在主线程创建UI的,楼主非常认定别的线程也可以~一同期待下是否确实可以。
里面的解释是这样的 Cause an invalidate to happen on a subsequent cycle through the event loop.
Use this to invalidate the View from a non-UI thread.这种方法是在非主线程通知主线程更新的
我劝楼主还是不要白费力气了,它就是这样设计的,你没有任何办法来改变。因为android里面认为在其他线程对UI的操作是不安全的,所以设计了Handler来更新UI。