在 Android 上加载数据时显示旋转轮对话框

2022-09-01 04:10:18

我想在我的应用加载一些数据时显示旋转轮对话框:

Spinning wheel dialog

旋转轮对话框应在单击按钮时显示。我正在使用下面的代码,但它现在确实显示了旋转的轮子。可能是什么问题?

public void CheckAccount(String username, String password) {
    try {

        final ProgressDialog progDailog = ProgressDialog.show(this,
            "Progress_bar or give anything you want",
            "Give message like ....please wait....", true);
        new Thread() {
            public void run() {
                try {
                    // sleep the thread, whatever time you want. 
                    sleep(1000);
                } catch (Exception e) {
                }
                progDailog.dismiss();
            }
        }.start();

        //getting data code here
        //getting data code here
        //getting data code here
        //getting data code here
        //getting data code here

    } catch (Exception e) {
        Log.e(LOG_TAG, e.getMessage());
        PopIt("CheckAccountError", e.getMessage(), "Denied");
    }
}

答案 1

因此,看到这个答案越来越受到越来越多的支持,我决定我应该自己承担起提高答案质量的责任。当我查看原文时,我没有看到“我的代码中有什么问题?”这个问题的真正“答案”。我在下面保留了原始答案以保留链接,这就是我假设导致答案流行的原因。

更新的答案

您可能违反了“单线程模型”。Android UI Toolkit 不是线程安全的,只能从“主”UI 线程进行操作。Android 提供了一些有用的方法,可用于确保在 UI 线程上完成 UI 操作。这些方法调用的大多数细节都可以在Android Painless Threading博客文章中找到(链接在下面的单词“one”中,并在此处快速参考)。

查看你的代码,我看到的具体冲突是在可能是UI线程的情况下创建的,然后在新创建的后台线程中消除。ProgressDialog

您最好将后台方法封装在 a 中,并使用 View#post(Runnable) 在后台完成工作。Runnable

请记住,有很多方法可以做背景,所以看看有什么可用,并使用适合你的情况。

原始答案

看看有关如何在 Android 中执行异步工作的众多教程之一

另外,这里还有其他一些类似的StackOverflow问题

安卓系统中的进度对话框问题

打开的活动上的进度对话框

启动新活动时的“进度”对话框

安卓:进度对话框微调器不旋转

“更新进度”对话框

机器人:显示进度对话框


答案 2

创建。

ProgressDialog dialog = new ProgressDialog(this); // this = YourActivity
dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
dialog.setTitle("Loading");
dialog.setMessage("Loading. Please wait...");
dialog.setIndeterminate(true);
dialog.setCanceledOnTouchOutside(false);

显示。

dialog.show();

关闭。

dialog.dismiss();

推荐