如何在android的Asynk任务中使用自定义进度条
使用上面的代码,我可以显示自定义进度条,但它设置在指定时间的线程上,但我有下面的asynk任务如何在android的Asynk任务中使用自定义进度条,android,Android,使用上面的代码,我可以显示自定义进度条,但它设置在指定时间的线程上,但我有下面的asynk任务 public class LoginActivity extends Activity { public static final int DIALOG_LOADING = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstance
public class LoginActivity extends Activity {
public static final int DIALOG_LOADING = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
showDialog(DIALOG_LOADING);
Thread thread = new Thread(null, doSomeTask);
thread.start();
}
private Runnable doSomeTask = new Runnable() {
public void run() {
try {
//Code of your task
Thread.sleep(10000);
} catch (InterruptedException e) {}
//Done! now continue on the UI thread
runOnUiThread(taskDone);
}
};
//Since we can't update our UI from a thread this Runnable takes care of that!
private Runnable taskDone = new Runnable() {
public void run() {
dismissDialog(DIALOG_LOADING);
}
};
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_LOADING:
final Dialog dialog = new Dialog(this, android.R.style.Theme_Translucent);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
//here we set layout of progress dialog
dialog.setContentView(R.layout.custom_progress_dialog);
dialog.setCancelable(true);
dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
public void onCancel(DialogInterface dialog) {
// TODO Auto-generated method stub
}
});
return dialog;
default:
return null;
}
};
类下载扩展了异步任务
{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的空位背景(空位…空位){
返回null;
}
@凌驾
受保护的void onPostExecute(void避免){
super.onPostExecute(避免);
}
}
我想在这里设置进度条一旦在后台完成,进度条就会消失。请建议我
class download extends AsyncTask<Void,Void,Void>
{
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... voids) {
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
}
}
异步任务
Runnable r = new Runnable()
{
@Override
public void run()
{
// your code here
}
};
Thread t = new Thread(r);
t.start();
类下载扩展了异步任务
{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
showDialog(DIALOG_LOADING);//异步任务启动时自定义警报启动
}
@凌驾
受保护的空位背景(空位…空位){
返回null;
}
@凌驾
受保护的void onPostExecute(void避免){
super.onPostExecute(避免);
dismissDialog(DIALOG_LOADING);//异步任务完成时自定义对话框Dismiss
}
}
使用AsyncTask,您可以在onPreExecute()中显示对话框,在onPostExecute()中下载数据后,您可以取消该对话框。启动下载任务到doInBackground()
公共类下载扩展异步任务{
私人活动;
私有静态最终整数对话框_加载=1;
公众下载(活动){
这个。活动=活动;
}
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
//在开始下载任务之前
activity.showDialog(对话框加载);
}
@凌驾
受保护的空位背景(空位…空位){
//在此处启动dowanload任务
返回null;
}
@凌驾
受保护的void onPostExecute(void避免){
super.onPostExecute(避免);
//下载数据后
activity.dismissDialog(对话框加载);
}
}
你好,我刚刚修改了
public class Download extends AsyncTask<Void,Void,Void>{
private Activity activity;
private static final int DIALOG_LOADING = 1;
public Download(Activity activity){
this.activity = activity;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
// before start download task
activity.showDialog(DIALOG_LOADING);
}
@Override
protected Void doInBackground(Void... voids) {
// start dowanload task here
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
// after downloaded data
activity.dismissDialog(DIALOG_LOADING);
}
}
公共类LoginActivity扩展活动{
公共静态最终整型对话框_加载=1;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u登录);
新下载().execute();
}
类下载扩展了异步任务
{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
showDialog(对话框加载);
}
@凌驾
受保护的空位背景(空位…空位){
//在这里做你的事
返回null;
}
@凌驾
受保护的void onPostExecute(void避免){
super.onPostExecute(避免);
dismissDialog(对话框\加载);
}
}
@凌驾
受保护的对话框onCreateDialog(int id){
开关(id){
案例对话框\u加载:
最终对话框=新对话框(这个,android.R.style.Theme_半透明);
对话框.requestWindowFeature(窗口.FEATURE\u无\u标题);
//这里我们设置进度对话框的布局
setContentView(R.layout.custom\u progress\u对话框);
对话框。可设置可取消(true);
setOnCancelListener(新的DialogInterface.OnCancelListener(){
public void onCancel(对话框接口对话框){
//TODO自动生成的方法存根
}
});
返回对话框;
违约:
返回null;
}
};
公共类MyAsyncTask扩展了AsyncTask{
私人语境;
私人对话;
公共保存的PatientData(上下文){
this.context=上下文;
}
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
pDialog=null;
pDialog=新建ProgressDialog(上下文,ProgressDialog.THEME\u HOLO\u LIGHT);
pDialog.setMax(100);
pDialog.setCancelable(假);
pDialog.setMessage(“正在保存\n….”);
setContentView(//您的布局);
pDialog.show();
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
//做点什么
返回null;
}
@凌驾
受保护的void onProgressUpdate(字符串…值){
super.onProgressUpdate(值);
setProgress(Integer.parseInt(值[0]);
}
@凌驾
受保护的void onPostExecute(字符串结果){
if((pDialog!=null)&&(pDialog.isShowing()){
pDialog.disclose();
}
}在
onPreExecute()内启动进度条
并在onPostExecute
内停止进度条。当我尝试调用showDialog(dialog\u LOADING)时,请在onPreExecute和onPostExecute中使用进度对话框;在on preexecute中,它会出错,您的异步任务在LoginActivity外吗?我没有使用过相同的类Asynk TaskshowDialog(DIALOG_LOADING);,dismissDialog(DIALOG_LOADING);此行将出现错误无法解决
class download extends AsyncTask<Void,Void,Void>
{
@Override
protected void onPreExecute() {
super.onPreExecute();
showDialog(DIALOG_LOADING); //custom alert start when AsyncTask start
}
@Override
protected Void doInBackground(Void... voids) {
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
dismissDialog(DIALOG_LOADING); //custom dialog Dissmiss when AsyncTask completed
}
}
public class Download extends AsyncTask<Void,Void,Void>{
private Activity activity;
private static final int DIALOG_LOADING = 1;
public Download(Activity activity){
this.activity = activity;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
// before start download task
activity.showDialog(DIALOG_LOADING);
}
@Override
protected Void doInBackground(Void... voids) {
// start dowanload task here
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
// after downloaded data
activity.dismissDialog(DIALOG_LOADING);
}
}
public class LoginActivity extends Activity {
public static final int DIALOG_LOADING = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
new download().execute();
}
class download extends AsyncTask<Void,Void,Void>
{
@Override
protected void onPreExecute() {
super.onPreExecute();
showDialog(DIALOG_LOADING);
}
@Override
protected Void doInBackground(Void... voids) {
//do your stuff here
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
dismissDialog(DIALOG_LOADING);
}
}
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_LOADING:
final Dialog dialog = new Dialog(this, android.R.style.Theme_Translucent);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
//here we set layout of progress dialog
dialog.setContentView(R.layout.custom_progress_dialog);
dialog.setCancelable(true);
dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
public void onCancel(DialogInterface dialog) {
// TODO Auto-generated method stub
}
});
return dialog;
default:
return null;
}
};
public class MyAsyncTask extends AsyncTask<String, String, String> {
private Context context;
private ProgressDialog pDialog;
public SavePatientData(Context context) {
this.context = context;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = null;
pDialog = new ProgressDialog(context, ProgressDialog.THEME_HOLO_LIGHT);
pDialog.setMax(100);
pDialog.setCancelable(false);
pDialog.setMessage("Saving\n .....");
pDialog.setContentView(// your coustom layout);
pDialog.show();
}
@Override
protected String doInBackground(String... params) {
// do someting
return null;
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
pDialog.setProgress(Integer.parseInt(values[0]));
}
@Override
protected void onPostExecute(String result) {
if ((pDialog != null) && (pDialog.isShowing())) {
pDialog.dismiss();
}