我创建了一个AsyncTask类,用于从后台获取数据(访问数据库)。
在 onPreExecute()方法中,我创建了一个进度对话框
try {
progressDialog = ProgressDialog.show(context, "",
"Please wait...", true);
progressDialog.setIndeterminate(true);
} catch (final Throwable th) {
// TODO
}
在onpostExecute()
中 protected void onPostExecute(Boolean result) {
pinPoint();
progressDialog.dismiss();
}
我的更新课程,
@Override
protected Boolean doInBackground(Void... params) {
clust = getPinPointClusters();
runOnUiThread(new Runnable() {
public void run() {
plotClusters(clust);
}
});
return true;
}
@Override
protected void onPostExecute(Boolean result) {
progressDialog.dismiss();
}
这里的pinpoint()方法将从服务器获取一些数据并固定地图中的点。 但ProgressDialog中的progressBar不是动画...... 请给我最好的方式......
由于
答案 0 :(得分:2)
我建议你将 pinPoint()方法放在doInBackground method
和方法 pinPoint()的行中 < em>影响用户界面 可以保存在此方法::
activityname.runOnUiThread(new Runnable() {
@Override
public void run()
{
// Put here the line which is changing the UI.
}
});
示例:当任何行尝试更改doInBackground中的UI时,请执行以下操作:
protected Boolean doInBackground(final String... args)
{
.
.
.
.
activityname.runOnUiThread(new Runnable() {
@Override
public void run()
{
eg. linearLayout.addView(ChildView);
}
});
.
.
.
}
现在,你必须从 onPostExecute()方法 解雇 ProgressDialog
。
答案 1 :(得分:1)
主动UI线程上出现“动画”。 onPostExecute
也可以在UI线程上运行,因此当您拨打服务器时,您可以有效地阻止它。将pinPoint
移至doInBackground
,以便在后台线程上执行,允许进度对话框保持动画效果。
在更高版本的android(Honeycomb [Android 3.0]以上版本)上运行代码时,在严格模式下也会抛出NetworkOnMainThreadException。
如果pinPoint
需要更改用户界面,则需要将网络调用分为doInBackground
(+数据操作),并且只有用户更改为onPostExecute
。您可以将任务的引用保存到数据中,或者将其传递给结果。
您还可以使用publishProgress
方法在doInBackground
期间发布多个UI更改。
答案 2 :(得分:0)
您已经创建了不同的功能来获取数据和更新UI部分
private class FetchRSSFeeds extends AsyncTask<String, Void, Boolean> {
private ProgressDialog dialog = new ProgressDialog(HomeActivity.this);
protected void onPreExecute() {
this.dialog.setMessage("Please wait");
this.dialog.show();
}
protected Boolean doInBackground(final String... args) {
try {
Utilities.arrayRSS = objRSSFeed.FetchRSSFeeds(Constants.Feed_URL);
return true;
} catch (Exception e) {
Log.e("tag", "error", e);
return false;
}
}
@Override
protected void onPostExecute(final Boolean success) {
if (dialog.isShowing()) {
dialog.dismiss();
}
if (success) {
// Setting data to list adaptar
setListData();
txtTitle.setText(Utilities.RSSTitle);
}
}
}