Android 进程对话框与线程
我正在安卓系统中开发列表视图控件。当我点击列表视图项时,我想要一个进度对话框,在请求的数据到来后,我想要停止它 我把这个对话框放在线程中,当线程停止时,我想显示另一个对话框,但它不工作,它会触发下面给出的错误 05-10 15:05:10.607:错误/AndroidRuntime(820):未捕获处理程序:由于未捕获异常,线程MagentoBackground正在退出 **05-10 15:05:10.617:错误/AndroidRuntime(820):java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序。 我的代码是这样的Android 进程对话框与线程,android,multithreading,progressdialog,Android,Multithreading,Progressdialog,我正在安卓系统中开发列表视图控件。当我点击列表视图项时,我想要一个进度对话框,在请求的数据到来后,我想要停止它 我把这个对话框放在线程中,当线程停止时,我想显示另一个对话框,但它不工作,它会触发下面给出的错误 05-10 15:05:10.607:错误/AndroidRuntime(820):未捕获处理程序:由于未捕获异常,线程MagentoBackground正在退出 **05-10 15:05:10.617:错误/AndroidRuntime(820):java.lang.RuntimeEx
Runnable viewQuestions = new Runnable(){
public void run() {
getViewAnswer(answerBean);
}
};
thread = new Thread(null, viewQuestions, "MagentoBackground");
thread.start();
m_ProgressDialog = ProgressDialog.show(context, "Please wait...", "Retrieving data ...", true);
protected void getViewAnswer(AnswerBean answerBean) {
//fetch data code
if(viewAnswerBeans != null && viewAnswerBeans.size() > 0){
m_ProgressDialog.dismiss();
viewAndGiveAnswerDialog(viewAnswerBeans);
dialogbox.show();
} else {
m_ProgressDialog.dismiss();
dialogBox.show();
}
}
我的问题是这个“dialogBox.show();”不起作用,它不会显示消息
有人能帮我解决这个问题吗?因为您是从非UI线程调用UI组件的。看看下面的链接 使用处理程序
private Handler gps_ws_handler = new Handler() {
@Override
public void handleMessage(Message msg) {
m_ProgressDialog.dismiss();
dialogBox.show();
}
};
在活动中创建处理程序
Handler handler = new Handler();
然后在getViewAnswer中,向其发布消息
protected void getViewAnswer(AnswerBean answerBean) {
//fetch data code
handler.post(new Runnable() {
@Override
public void run() {
if(viewAnswerBeans != null && viewAnswerBeans.size() > 0){
m_ProgressDialog.dismiss();
viewAndGiveAnswerDialog(viewAnswerBeans);
dialogbox.show();
} else {
m_ProgressDialog.dismiss();
dialogBox.show();
}
}
});
}
对于后台任务,请使用AsyncTask和ProgressDialog,如图所示。出于这些目的,我建议您使用 公共类活动扩展了活动{
private ProgressDialog m_ProgressDialog = null;
private Runnable viewOrders;
private ListView mListView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.yourLayout);
viewOrders = new Runnable() {
public void run() {
loadList();
}
};
Thread thread = new Thread(null, viewOrders, "MagentoBackground");
thread.start();
m_ProgressDialog = ProgressDialog.show(YourActivity.this, "",
"Get Data...", true);
}
private Runnable returnRes = new Runnable() {
public void run() {
mListView = (ListView) findViewById(R.id.yourList);
//create here your adapter
mListView.setAdapter(yourAdapter);
mListView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View v,
int position, long arg3) {
//on item click
}
});
}
m_ProgressDialog.dismiss();
}
};
private void loadList() {
try {
/* Make your request Here
The progress Dialog is dismissed automatically after request is finished */
}
Thread.sleep(1000);
} catch (Exception e) {
}
runOnUiThread(returnRes);
}
private ProgressDialog m_ProgressDialog=null;
私人可运行视图命令;
私有列表视图;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.yourLayout);
viewOrders=new Runnable(){
公开募捐{
loadList();
}
};
线程线程=新线程(null,viewOrders,“MagentoBackground”);
thread.start();
m_ProgressDialog=ProgressDialog.show(YourActivity.this,“,
“获取数据…”,正确);
}
private Runnable returnRes=new Runnable(){
公开募捐{
mListView=(ListView)findViewById(R.id.yourList);
//在这里创建适配器
mListView.setAdapter(您的适配器);
setOnItemClickListener(新的OnItemClickListener(){
公共链接(AdapterView arg0,视图v,
整数位置,长arg3){
//点击项目
}
});
}
m_ProgressDialog.discouse();
}
};
私有void加载列表(){
试一试{
/*在这里提出你的要求
请求完成后,“进度”对话框将自动关闭*/
}
睡眠(1000);
}捕获(例外e){
}
runOnUiThread(returnRes);
}
}