Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Android上加载数据时显示旋转轮对话框_Java_Android_Dialog_Loading_Progress - Fatal编程技术网

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

Java 在Android上加载数据时显示旋转轮对话框,java,android,dialog,loading,progress,Java,Android,Dialog,Loading,Progress,当我的应用程序加载一些数据时,我想显示一个旋转的轮子对话框: 单击按钮时应显示“旋转轮子”对话框。我正在使用下面的代码,但它现在确实显示了旋转的轮子。有什么问题吗 public void CheckAccount(String username, String password) { try { final ProgressDialog progDailog = ProgressDialog.show(this, "Progress_bar o

当我的应用程序加载一些数据时,我想显示一个旋转的轮子对话框:

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

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");
    }
}

因此,鉴于这个答案获得越来越多的赞成票,我决定我自己来提高答案的质量。当我看到原文时,我没有看到“我的代码中有什么问题?”这个问题的真正“答案”。我在下面保留了原始答案,以保留链接,我认为这是导致答案流行的原因

更新的答案

很可能您违反了“单线程模型”。Android UI工具包不是线程安全的,只能从“主”UI线程进行操作。Android有一些有用的方法可以用来确保UI操作在UI线程上完成。这些方法调用的大部分细节可以在Android无痛线程博客帖子中找到(链接在下面的“一”字中,供快速参考)

查看您的代码,我看到的具体冲突是在UI线程中创建了一个
ProgressDialog
,然后在新创建的后台线程中取消该线程

您最好将您的后台方法封装在一个
Runnable
中,并使用它在后台完成工作

请记住,有很多方法可以进行后台处理,因此请查看可用的方法,并使用适合您的情况的方法

原始答案

试着了解一下在这方面该怎么做

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

创建。 展示。 解雇。
我遇到了在两个活动(活动A和活动B)之间切换的问题。活动B有正在更新UI的长时间运行的任务,因此它不是AsyncTask的候选任务。我通过在完成第一个活动之前启动活动a和活动B的进度对话框解决了这个问题。代码如下所示:

            // wrap thread around original code for progress button
            final ProgressDialog ringProgressDialog = ProgressDialog.show(getActivity(), "Working", "Please Wait",
                    true, false);
            ringProgressDialog.setIndeterminate(true);
            new Thread(new Runnable() {
                public void run() {
                    try {

                        Intent startNewActivityOpen = new Intent(getActivity(), ActivityB.class);
                        startNewActivityOpen.setFlags(Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);
                        startActivity(startNewActivityOpen);
                        GlobalVars.navigateFromScreen = true;

                        Thread.sleep(3000);


                        if (ringProgressDialog != null && ringProgressDialog.isShowing()) {
                            ringProgressDialog.dismiss();
                        }

                        getActivity().finish();


                    } catch (Exception e) {

                    }

                }

            }).start();

喜欢引用,+1:)工作起来很有魅力。但是,一旦加载数据,如何停止它?隐藏对话框调用
dialog.disease()
ProgressDialog已弃用,可能会在Android的未来迭代中删除
dialog.show();
dialog.dismiss();
            // wrap thread around original code for progress button
            final ProgressDialog ringProgressDialog = ProgressDialog.show(getActivity(), "Working", "Please Wait",
                    true, false);
            ringProgressDialog.setIndeterminate(true);
            new Thread(new Runnable() {
                public void run() {
                    try {

                        Intent startNewActivityOpen = new Intent(getActivity(), ActivityB.class);
                        startNewActivityOpen.setFlags(Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);
                        startActivity(startNewActivityOpen);
                        GlobalVars.navigateFromScreen = true;

                        Thread.sleep(3000);


                        if (ringProgressDialog != null && ringProgressDialog.isShowing()) {
                            ringProgressDialog.dismiss();
                        }

                        getActivity().finish();


                    } catch (Exception e) {

                    }

                }

            }).start();