【问题标题】:How do I show a ProgressDialog while an HttpRequest executes on Android?如何在 Android 上执行 HttpRequest 时显示 ProgressDialog?
【发布时间】:2011-03-10 17:11:15
【问题描述】:

我有以下代码,是通过查看 Android 开发人员文档中的示例获得的。但是,它实际上并没有显示对话框。如果我发出dismiss() 调用,它会在调用doLogin() 完成后显示对话框,然后永远不会消失。我不需要它花哨,我只想在请求执行时显示一些东西。

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

    int r = app.doLogin();

    dialog.dismiss();

doLogin() 是一种向服务器发出 HTTP 请求并返回状态码以指示请求是否成功的方法。

【问题讨论】:

标签: java android http progressdialog


【解决方案1】:

在主线程上运行 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();

当然,三层嵌套不是必需的。只是想在这里说明该技术。

【讨论】:

  • 使用 AsyncTask 会更容易。
  • @Flo:AsyncTask 提供参数的系统笨拙且对原语不利。当您通过闭包免费获得所有这些时,谁需要参数。
  • 我明白你的意思,但对于 Android 初学者来说,AsyncTask 可能更容易理解,因为在我看来,它比带有处理程序和自定义线程的解决方案更结构化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多