2016-07-15 26 views
0

我想要使用进度条...但是当我搜索时,进度条不能与Asynctask.get一起使用,但我必须在Asynctask中使用.get和进度。如何使用Asynctask获取方法进度?

我做了非常简单的源代码。 如何更改主线程中显示进度条?

我想同时使用get方法和UI进度。

public void onCreate(Bundle savedInstanceState) { 
    btn.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      AAA asyncTask = new AAA(); 
      try { 
       ((AAA) asyncTask).execute(null, null, null,null).get(); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (ExecutionException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 
public class AAA extends AsyncTask<Object, String, Object> { 
    private ProgressDialog progDailog = null; 


    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     progDailog = new ProgressDialog(ViewTestActivity.this); 
     progDailog.setMessage("Loading..."); 
     progDailog.setIndeterminate(false); 
     progDailog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
     progDailog.setCancelable(true); 
     progDailog.show(); 
    } 

    @Override 
    protected Object doInBackground(Object... params) { 
     try { 
      Thread.sleep(3000); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return params; 
    } 

    @Override 
    protected void onPostExecute(Object result) { 
     progDailog.dismiss(); 
    } 
} 

请帮帮我。 谢谢!

回答

1

调用AsyncTask

private ProgressDialog progDailog = null; 

public void onCreate(Bundle savedInstanceState) { 
    btn.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      AAA asyncTask = new AAA(); 
      try { 
       progDailog = new ProgressDialog(ViewTestActivity.this); 
       progDailog.setMessage("Loading..."); 
       progDailog.setIndeterminate(false); 
       progDailog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
       progDailog.setCancelable(true); 
       progDailog.show(); 
       ((AAA) asyncTask).execute(null, null, null,null); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (ExecutionException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 
public class AAA extends AsyncTask<Object, String, Object> { 



    @Override 
    protected Object doInBackground(Object... params) { 
     try { 
      Thread.sleep(3000); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return params; 
    } 

    @Override 
    protected void onPostExecute(Object result) { 
     progDailog.dismiss(); 
    } 
} 
+0

OMG ......感谢非常好!!!!你节省了我的时间! – Adrian

+0

我得到了一个错误(?),它在3000秒内运行良好,但是如果我添加10000,它不能正常工作.T_T – Adrian

+0

分享logcat –

0

我不知道是否有一个标准答案之前做,但我只是做了通过设置监听器在主线程和发送进度消息非常类似的东西来自异步任务的监听者 - 实际上在我的情况下,它是从数据库异步加载的。对我来说工作得很好。

+0

ho ??你的意思是..像回调函数? – Adrian

0

你应该更新onProgressUpdate

你的进度条百分比见这个例子 AsyncTask with progress bar

+0

但问题是进度条没有显示... – Adrian

+0

我想,你打算说进度对话框,而不是进度条。这就是为什么,我误解了你的问题。 – alian

+0

啊谢谢。我错过了...进度对话框,谢谢 – Adrian

0

这种尝试:

private ProgressDialog progDailog; 

public void onCreate(Bundle savedInstanceState) { 
     btn.setOnClickListener(new OnClickListener() { 
@Override 
public void onClick(View v) { 
     progDailog = new ProgressDialog(ViewTestActivity.this); 
     progDailog.setMessage("Loading..."); 
     progDailog.setIndeterminate(false); 
     progDailog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
     progDailog.setCancelable(true); 
     progDailog.show(); 
     AAA asyncTask = new AAA(progDialog); 
     try { 
     ((AAA) asyncTask).execute(null, null, null,null).get(); 
     } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     } catch (ExecutionException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     } 
     } 
     }); 
     } 
public class AAA extends AsyncTask<Object, String, Object> { 

    private ProgressDialog progressDialog; 

    public AAA (ProgressDialog progressDialog) { 
     this.progressDialog = progressDialog; 
    } 

    @Override 
    protected Object doInBackground(Object... params) { 
     try { 
      Thread.sleep(3000); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return params; 
    } 

    @Override 
    protected void onPostExecute(Object result) { 
     progressDialog.dismiss(); 
    } 
} 
+0

hm ...对不起,如果我延迟睡眠时间,它不会很好.. T_T .. – Adrian