问题描述
|
谁能告诉我为什么进度条轮不旋转...我正在尝试从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 downloa@R_502_5710@rts() {
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);
}
谢谢...
解决方法
您可能必须将其放入AsyncTask中。如果您尝试将进度条放在主UI线程中,则如果您在后台执行其他操作(如此处所述),进度条将不会移动。
, 通过致电
mHandler.post(r)
您没有在新线程中运行可运行对象,而是将其发布到消息队列中-这意味着在主UI线程中。这会导致应用程序在下载数据时冻结。
您应该运行AsyncTask或新线程。例如在Runnable r的末尾放置类似
Runnable r = new Runnable(){
@Override
public void run() {
.......
context.runOnUiThread(new Runnable() {
@Override
public void run() {
hideProgressOnSuccess_andShowData();
}
});
}
}
然后像这样运行您的Runnable r:
new Thread(r).start();
当然,使用AsyncTask并使用其onPreExecute和onPostExecute可以使其更加优雅。
问候,
担