我有以下代码,这是通过查看android开发人员文档中的示例得到的。但是,它实际上并不显示对话框。如果我去掉dissive()调用,它会在dologin()调用完成后显示对话框,然后再也不会消失。我不需要太花哨,我只想在请求执行时显示一些内容。

    ProgressDialog dialog = ProgressDialog.show(GameList.this, "",
            "Connecting. Please wait...", true);

    int r = app.doLogin();

    dialog.dismiss();

dologin()是一个对服务器发出http请求的方法,它返回一个状态代码来指示请求是否成功。

最佳答案

在主线程上运行http请求从来都不是一个好主意。旋转工作线程,使用处理程序在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();

当然,不需要三层嵌套。只是想说明一下这项技术。

09-30 15:04
查看更多