【问题标题】:Access a custom class from a new thread in a ProgressDialog on Android从 Android 上 ProgressDialog 中的新线程访问自定义类
【发布时间】:2012-01-11 11:43:21
【问题描述】:

我在 android 中创建了一个 ProgressDialog,当我做一个简单的例子时它就可以工作。

例如,这是可行的。

public void onClick(View v) 
{
    // Perform action on click
    System.out.println("Progess Bar");
    final ProgressDialog myProgressDialog = ProgressDialog.show(AndroidTestApplicationActivity.this,
                    "Please wait...", "Getting updates...", true);

    new Thread() 
    {
            public void run() 
            {
                    try
                    {
                            // Do some Fake-Work
                            sleep(5000);
                    } 
                    catch (Exception e) 
                    { 

                    }

                    // Dismiss the Dialog
                    myProgressDialog.dismiss();
            }
    }.start();

}

但是,一旦我添加了对自定义类的引用,它就会停止运行这个新线程。

    button1.setOnClickListener(new View.OnClickListener() 
{
    public void onClick(View v) 
    {
        // Perform action on click
        System.out.println("Progess Bar");
        // Display an indeterminate Progress-Dialog
        final ProgressDialog myProgressDialog = ProgressDialog.show(AndroidTestApplicationActivity.this,
                        "Please wait...", "Getting Updates...", true);

        new Thread() 
        {
                public void run() 
                {
                        try
                        {
                                HealthySubObject hsObject = new HealthySubObject();
                                // Do some more work with my hsObject - nothing happens after this point. 
                                sleep(5000);
                        } 
                        catch (Exception e) 
                        { 

                        }

                        // Dismiss the Dialog
                        myProgressDialog.dismiss();
                }
        }.start();

    }
});

发生的情况是,只要我单击此按钮,进度对话框就会在屏幕上快速闪现,然后消失。但是如果你看我的代码,它应该在消失之前等待 5 秒。我在引用自定义类之前和之后放置了调试语句,我可以看到之前的语句,但看不到之后的语句。有谁知道为什么会这样?只要我的课程是公开的,我就应该可以从新线程中调用它,对吗?

我对 android 还是很陌生,这是我对多线程 android 应用程序的第一次冒险。任何帮助将非常感激。

解决方案

感谢大家的帮助。它现在正在工作。

    button1.setOnClickListener(new View.OnClickListener() 
    {
        public void onClick(View v) 
        {
            // Perform action on click
            System.out.println("Progess Bar");
            //ProgressDialog dialog = ProgressDialog.show(AndroidTestApplicationActivity.this, "", "Loading. Please wait...", true);
            // Display an indeterminate Progress-Dialog
            final ProgressDialog myProgressDialog = ProgressDialog.show(AndroidTestApplicationActivity.this,
                            "Please wait...", "Doing Extreme Calculations...", true);

            Handler handler = new Handler();
            handler.postDelayed(new Runnable() 
            {
                @Override
                public void run() 
                {
                    HealthySubObject hsObject = new HealthySubObject();
                    ArrayList<HashMap<String, String>> onlineDB = hsObject.jsonToArray(); 
                    //
                    // more stuff goes here.  
                    //
                    //
                    myProgressDialog.dismiss();
                }
            }, 1500);

        }
    });

【问题讨论】:

    标签: android progressdialog


    【解决方案1】:

    我真的建议使用Handler 而不是 Thread。实际上不鼓励使用Thread.sleep 方法。这样的事情要好得多:

    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            HealthySubObject hsObject = new HealthySubObject();
            myProgressDialog.dismiss();
        }
    }, 5000);
    

    【讨论】:

      【解决方案2】:

      问题是您需要在 UI 线程上进行修改 UI,并且在线程的 run() 方法中,您处于“后台”线程中。当您需要访问 UI 线程时,请尝试在线程中使用处理程序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-25
        • 1970-01-01
        • 2012-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-06
        • 1970-01-01
        相关资源
        最近更新 更多