[问题] 用AnyscTask无法显示ProgressDialog (修改)

楼主: cuke (干口)   2016-02-25 05:20:57
各位好
小弟有个问题
我在呼叫AsyncTask之前有先显示ProgressDialog.show
因为我用AsyncTask抓取的资料大约要用掉3~5秒的时间,想要先显示Loading
但完全没出现
不知道是出了什么问题?
谢谢
片段程式码如下
@Override
public void onClick(View v) {
progressDialog = new ProgressDialog(CommunityActivity.this);
progressDialog.setMessage("Loading");
progressDialog.setIndeterminate(false);
progressDialog.show();
try {
List<FlavorVO> flavorVOs = new FlavorGetTask().execute(url,ablumVO.getCommno()).get();
} catch (Exception e) {
Log.d(TAG,e.toString());
}
progressDialog.cancel();
作者: corrupt003 (QQ)   2016-02-25 08:45:00
AsyncTask是 background thread,你执行task 就马上 cancel dialog,当然会看不到。应该在AsyncTask 事情做完时再 cancel dialog。官方 doc 有范例可以参考
作者: MIM23 (HAWK)   2016-02-25 09:18:00
楼上正解。多执行序观念可能要加强
作者: cakeboy   2016-02-25 11:53:00
cancel 一般都写在asynctask 的onpostexcuteshow 可以写在onpreexcute
作者: givemepass (λ)   2016-02-25 20:22:00
你呼叫完AsyncTask就马上Intent到另外一支activity
作者: corrupt003 (QQ)   2016-02-25 22:34:00
另外一提,你为什么要用 AsyncTask.get()呢?
作者: marfha   2016-02-25 22:58:00
onPreExcute()不是main Thread,dialog应该show不出来progressDialog.show()拿到外面做
作者: cakeboy   2016-02-25 23:10:00
onpreexcute 是被ui thread 呼叫没错
作者: ssccg (23)   2016-02-26 00:01:00
AsyncTask.get() 就把ui thread block住了,当然show不出来然后在get return后马上(原code)/之前(onPostExecute)就把dialog cancel掉,所以从头到尾都没有出现你的multithread观念要修正,在呼叫AsyncTask.execute()后就该直接return,要等task完才做的全部放在onPostExecute或从OnPostExecute再callback出来
作者: MIM23 (HAWK)   2016-02-26 02:54:00
学异步的处理,你使用get会卡住 main thread,会ANR

Links booklink

Contact Us: admin [ a t ] ucptt.com