Java 在Android中运行方法时显示加载对话框?

Java 在Android中运行方法时显示加载对话框?,java,android,dialog,loading,progress,Java,Android,Dialog,Loading,Progress,我有一个方法设置,运行大约需要3-5秒(因为它可以在线执行某些操作),我想显示一个加载对话框,但我不知道如何执行,我尝试在调用该方法之前启动加载拨号,然后尝试立即关闭它,如下所示: dialog.show(); myMethod(); dialog.cancel(); 但这不起作用,有人有什么建议吗?在UI线程上运行长时间任务是“不可能的”。用于在后台运行长时间任务,并在任务完成后更新UI。AsyncTask是我的最爱,但您也可以使用处理程序:) 投入你的时间来度过这美好的时光 下面的代码片段

我有一个方法设置,运行大约需要3-5秒(因为它可以在线执行某些操作),我想显示一个加载对话框,但我不知道如何执行,我尝试在调用该方法之前启动加载拨号,然后尝试立即关闭它,如下所示:

dialog.show();
myMethod();
dialog.cancel();

但这不起作用,有人有什么建议吗?

在UI线程上运行长时间任务是“不可能的”。用于在后台运行长时间任务,并在任务完成后更新UI。

AsyncTask是我的最爱,但您也可以使用处理程序:)

投入你的时间来度过这美好的时光

下面的代码片段将帮助您

    package org.sample;

    import android.app.Activity;
    import android.app.ProgressDialog;
    import android.os.Bundle;
    import android.os.Handler;

    public class Hello extends Activity {

        private Handler handler;
        private ProgressDialog dialog;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            dialog = new ProgressDialog(this);
            dialog.setMessage("Please Wait!!");
            dialog.setCancelable(false);
            dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            dialog.show();

            new Thread() {
                public void run() {
                    // Do operation here.
                    // ...
                    // ...
                    // and then mark handler to notify to main thread 
                    // to  remove  progressbar
                    //
                    // handler.sendEmptyMessage(0);
                    //
                    // Or if you want to access UI elements here then
                    //
                    // runOnUiThread(new Runnable() {
                    //
                    //     public void run() {
                    //         Now here you can interact 
                    //         with ui elemements.
                    //
                    //     }
                    // });
                }
            }.start();

            handler = new Handler() {
                public void handleMessage(android.os.Message msg) {
                    dialog.dismiss();
                };
            };
        }
    }

我以前尝试过使用它,但我一直得到“只有创建视图层次结构的原始线程才能接触它的视图。”错误。我不知道这意味着什么。。。英雄联盟有什么建议吗?您正在尝试从线程访问UI元素。这就是为什么您会出现此错误。非常感谢!它现在工作得很好:)我最终使用了run()来完成我的方法,就像您以前使用它一样,但随后使用runOnUiThread来更改需要更改的视图!:D