进度条微调器不旋转

时间:2011-06-14 12:34:36

标签: android progress-bar

任何人都可以告诉我为什么进度条轮不旋转...我试图从Web服务器下载数据时放入进度条一切都很好,直到现在...我可以在下载数据时设置进度条但问题进度条微调器不旋转....下面是我的进度条代码:

<Progressbar 
    android:id="@+id/xPBar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    style="@android:style/Widget.ProgressBar.Inverse"/>

这是下载代码: 在执行此方法时,我正在显示进度条

    public void downloadAlerts() {
    mPBar.setVisibility(ProgressBar.VISIBLE);
    Runnable r = new Runnable() {

        @Override
        public void run() {
            if (checkNetworkStatus(getApplicationContext()) == true) {
                String alert = con.execute(ALERTS_URL
                        );
                AlertsParser parser = new AlertsParser();
                parser.parseJson(alert);
                startActivity(new Intent(getApplicationContext(), Alerts.class));
                onSuccessDownload();
            } else if (checkNetworkStatus(getApplicationContext()) == false) {
                onFailureDownload();
            }

        }
    };
    mHandler.post(r);

}

...谢谢

2 个答案:

答案 0 :(得分:4)

您可能需要将其放入AsyncTask。如果您尝试将进度条放在主UI线程中,那么如果您在后台执行其他操作,则不会移动,如here所述。

答案 1 :(得分:3)

致电

  

mHandler.post(r)的

您没有在新线程中运行runnable,而是将其发布到消息队列中 - 这意味着在主UI线程中。这会导致应用程序在您下载数据时冻结。

您应该运行AsyncTask或新线程。例如,在你的Runnable r的末尾添加类似

的内容
  

Runnable r = new Runnable(){

   @Override
    public void run() {
        .......
        context.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                hideProgressOnSuccess_andShowData();
            }
        });
    }
     

}

然后像这样运行你的Runnable:

  

new Thread(r).start();

使用AsyncTask并使用其onPreExecute和onPostExecute,它当然可以更优雅。

电贺, 丹