thể trùng lặp:
AsyncTask block UI threat and show progressbar with delayProgressDialog không được hiển thị khi AsyncTask.get() được gọi
Tôi muốn thể hiện một progressDialog khi lấy JSON từ bất kỳ máy chủ. Vì vậy, tôi đã sử dụng AsyncTask như một giải pháp (không chắc chắn bất kỳ cách nào khác).
Mọi thứ đều ổn, ProgressDialog hoạt động đúng cho đến khi tôi gọi phương thức .get() sử dụng thể hiện AsyncTask. Tôi cho rằng nó chặn giao diện người dùng bằng cách nào đó. Dưới đây là AsyncTask tôi:
public class myAsync extends AsyncTask<String, String, List> {
String message; // for dialog message
ProgressDialog progress;
Intent myIntent;
Context ctx;
public myAsync(String message, Context ctx) {
this.message = message;
this.ctx = ctx;
progress = new ProgressDialog(ctx);
}
@Override
protected void onPreExecute() {
progress.setMessage(message);
progress.setIndeterminate(true);
progress.setCancelable(false);
progress.show();
}
@Override
protected List doInBackground(String... params) {
//returns any list after the task
return anyList;
}
@Override
protected void onPostExecute(List result) {
if(progress.isShowing())
progress.dismiss();
}
}
Và đây là myActivity đó là gọi AsyncTask:
myAsync asyncTask = new myAsync("Loading...", this);
asyncTask.execute("Any string", "Other string");
asyncTask.get(); // If I comment out this line, ProgressDialog works
Sau khi thực hiện, khi tôi cố gắng ghi lại các kết quả từ doInBackground và onPostExecute cả không có vấn đề. Nhưng nếu tôi muốn nhận được với .get() kết quả ProgressDialog không được hiển thị hoặc hiển thị quá ít thời gian (có thể 0,2 giây)
Có vấn đề gì?
bạn có ghét bất kỳ ngoại lệ nào không? – Richie
Không thực sự. Như tôi đã nói, cửa sổ hộp thoại có thể được nhìn thấy quá ít thời gian. Thật vậy nó nên được nhìn thấy ít nhất 2 giây. –