我有以下代码,我通过查看Android开发人员文档中的示例获得了该代码。但是,它实际上并不显示对话框。如果我调用dismiss(),它会在调用doLogin()完成后显示对话框,然后永远不会消失。我不需要它是花哨的,我只是想在请求执行时显示一些东西。
ProgressDialog dialog = ProgressDialog.show(GameList.this, "",
"Connecting. Please wait...", true);
int r = app.doLogin();
dialog.dismiss();
doLogin()是一个对服务器发出HTTP请求的方法,它返回一个状态代码来指示请求是否成功。
答案 0 :(得分:4)
在主线程上运行HTTP请求绝不是个好主意。旋转一个工作线程,使用Handler在UI线程中关闭对话框。像这样:
ProgressDialog dialog = ProgressDialog.show(GameList.this, "", "Connecting. Please wait...", true);
final Handler h = new Handler(); //will execute on the main thread
new Thread(new Runnable(){
public void run()
{
app.doLogin();
h.post(new Runnable()
{
public void run()
{
dialog.dismiss();
}
}
}
}).start();
当然,没有必要进行三级嵌套。试图在这里说明这种技术。