关于在非UI线程中进行UI操作会出现问题: Can't create handler inside thread that has not called Looper.prepare()
2012-01-11 12:42
411 查看
Activity,Service属于主线程,在主线程中才能更新UI,如toast等。其他线程中不能直接使用,否则产生 Can't create handler inside thread that has not called Looper.prepare()的错误,这时可以使用Handler来处理,Handler可以在Activity和Service中。
功能:当在非UI线程中调用CallPayment()时,弹出对话框。
public void CallPayment(String a) {
h.post(pay);
}
Handler h =
new Handler(){
public void handleMessage (Message msg)
{
switch(msg.what)
{
case HANDLER_TEST:
confirmPay();
break;
case HANDLER_OVER:
h.removeCallbacks(pay);
break;
}
}
};
Runnable pay =new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Message msg = new Message();
msg.what = HANDLER_TEST;
h.sendMessage(msg);
}
};
public
void confirmPay(){
Dialog
dialog=new AlertDialog.Builder(DevilsAtTheGateGameActivity.this)
.setMessage(payStr+"EP을 구매하겠습니까?\n금액:"+payStr+"원")
.setPositiveButton(R.string.confirm_pay_yes,new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int whichButton) {
//DoSomething
}
})
.setNegativeButton(R.string.confirm_pay_no,new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int whichButton) {
dialog.dismiss();
Message msg =
new Message();
msg.what =HANDLER_OVER;
h.sendMessage(msg);
}
}).show();
}
}
功能:当在非UI线程中调用CallPayment()时,弹出对话框。
public void CallPayment(String a) {
h.post(pay);
}
Handler h =
new Handler(){
public void handleMessage (Message msg)
{
switch(msg.what)
{
case HANDLER_TEST:
confirmPay();
break;
case HANDLER_OVER:
h.removeCallbacks(pay);
break;
}
}
};
Runnable pay =new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Message msg = new Message();
msg.what = HANDLER_TEST;
h.sendMessage(msg);
}
};
public
void confirmPay(){
Dialog
dialog=new AlertDialog.Builder(DevilsAtTheGateGameActivity.this)
.setMessage(payStr+"EP을 구매하겠습니까?\n금액:"+payStr+"원")
.setPositiveButton(R.string.confirm_pay_yes,new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int whichButton) {
//DoSomething
}
})
.setNegativeButton(R.string.confirm_pay_no,new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int whichButton) {
dialog.dismiss();
Message msg =
new Message();
msg.what =HANDLER_OVER;
h.sendMessage(msg);
}
}).show();
}
}
相关文章推荐
- Android 子线程中进行UI操作遇到的小问题
- C#线程相关问题总结:基本操作及UI控件交互
- 关于多线程中涉及UI操作,导致UI线程阻塞问题
- 关于SubSonic3.0插件使用实体进行更新操作时(执行T.Update()或T.Save()),某些列无法进行修改操作的问题处理
- 后台线程与UI线程问题:解决“线程间操作无效: 从不是创建控件xxx的线程访问它”
- Android 关于UI线程的问题
- Android 子线程中进行UI操作(非发送消息)
- 子线程中进行UI操作
- !!c# 委托与多线程 -- 相比background来说,本方法针对当需要通过异步代理发起UI操作,而后线程中进行sleep操作的时使用
- 关于子线程里不能更新UI操作的解决方法
- 【连载】【FPGA黑金开发板】NIOS II那些事儿--NIOS II下关于无法进行寄存器方式操作PIO的问题解析(十四)
- iOS子线程操作UI问题检查
- [Android] 关于UI在主线程操作的问题(handler和AsyncTask)
- 关于android Handler进行线程处理消息队列与线程队列线程无法停止的问题
- 关于使用js进行表单提交操作引发的表单重复提交问题
- 关于对sqlserver进行大量数据操作,连接池满的问题--转载
- [VB.NET]在线程里频繁的进行委托操作主界面的ui是不是效果不好?
- 【黑马程序员】关于多线程聊天室中出现的“由于其他线程拥有此对象,因此调用线程无法对其进行访问”问题的探究
- 4000 c#关于“线程间操作无效: 从不是创建控件的线程访问它”的问题
- 关于mysql数据库8小时不进行操作连接自动断开问题的解决办法