我有与webservice通信的功能,并且数据插入到数据库中 在此函数执行期间....我无法预测执行该函数需要多长时间。
问题是我需要显示一个progess栏,当函数执行停止时它结束。它需要显示进度。
或者是否还有其他任何选项显示正在进行中......
我的功能如下所示....
public Boolean startdownload() {
downloadhelper = new download_helper(this);
downloadhelper.DownloadProblemAndReasonCode();
pkManifest=downloadhelper.DownloadNewManifest();
downloadhelper.DownloadNewMessages();
return True;
}
我也在开始按钮的onclick事件上实现线程.......
start_button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Status.setText("Download in Progress....");
new Thread(new Runnable() {
public void run() {
try {
startdownload();
onStop();
isRunning=false;
} catch (Throwable t) {
t.toString();
}
}
}).start();
if (isRunning=false)
{
Status.setText("Download Completed");
}
}
});
答案 0 :(得分:1)
更简单的方法是使用Android的Asynctask概念并且非常容易实现 参考this
答案 1 :(得分:1)
//Take one progress bar Display here
new Thread(new Runnable() {
public void run() {
try {
startdownload();
onStop();
isRunning=false;
} catch (Throwable t) {
t.toString();
}
}
}).start();
if (isRunning=false)
{
Status.setText("Download Completed");
}
handler.sendEmptyMessagetrue(0);
}
//Now take handler class here to dismiss() progress bar when worked finish in thread
private Handler handler()=new Handler(){
override onhandlerMsge();dissmiss dialog in this method
}
答案 2 :(得分:1)
您可以在布局的某处放置ProgressBar
,当您准备好进行网络通信时,请致电mProgressBar.setVisibility(View.VISIBLE);
完成通话后mProgressBar.setVisibility(View.GONE);
另一种方法是使用Android系统栏中的进度条。要在onCreate()
调用requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS)
后的setContentView()
setProgressBarIndeterminateVisibility(boolean)
中执行该操作,您可以在活动的任何地方致电{{1}}。
答案 3 :(得分:0)
在Asynctask
旁边,您可以使用Handler
及其handleMessage()
。在工作线程内部,向Handler
发送消息以显示进度并在工作线程结束时通知
答案 4 :(得分:0)
showLoading();// Calling showdialog before downloading..
Thread t = new Thread(){
public void run() {
// Code for download....
// After download UI thread will call
runOnUiThread(new Runnable() {
@Override
public void run() {
dialog.cancel();
alertbox("Info","Download Completed");
}
});
}};
t.start();
public ProgressDialog dialog;
public void showLoading () {
// prepare the dialog box
//ProgressDialog
dialog = new ProgressDialog(this);
// make the progress bar cancelable
dialog.setCancelable(true);
// set a message text
dialog.setMessage("Please wait while Downloading..");
// show it
dialog.show();
}
protected void alertbox(String title, String mymessage)
{
new AlertDialog.Builder(this)
.setMessage(mymessage)
.setTitle(title)
.setCancelable(true)
.setNeutralButton("OK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int whichButton){}
})
.show();
}
编辑:2011年8月19日
您可以使用以下代码取消进度对话框。请尝试
dialog.setButton("Cancel",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
}
});