public class LoadDataTask extends AsyncTask<String, String, Void> {
ArrayList<Datamodel> list;
ProgressDialog pDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(ContactActivity.this);
pDialog.setTitle("loading Contact");
pDialog.setMessage("Please wait...");
pDialog.setCanceledOnTouchOutside(false);
pDialog.show();
}
@Override
protected Void doInBackground(String... params) {
boolean isDbEmpty = loadContactFromDb();
_GetLocation();
if (isDbEmpty) {
publishProgress("Sync Contact");
String numbers = fetchContacts();
list = uploadPhoneNumber(numbers);
System.out.println("count :: " + list.size());
}
return null;
}
@Override
public void onProgressUpdate(String... strings) {
pDialog.setTitle(strings[0]);
}
public boolean loadContactFromDb() {
DataBaseManager dbManager = new DataBaseManager(
ContactActivity.this);
list = dbManager.fetchContactList(_mylat,_mylong);
if (list == null || list.isEmpty()) {
return true;
}
return false;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
DBHelper.dbBackup();
mDataModelArray.clear();
mDataModelArray.addAll(list);
mAdapter.notifyDataSetChanged();
schedueService();
if(pDialog!=null && pDialog.isShowing()){
pDialog.dismiss();
}
}
}
这是我的代码,我在 pDialog.show(( 上得到异常; at com.lociiapp.ContactActivity$LoadDataTask.onPreExecute(ContactActivity.java:495(活动已泄露窗口com.android.internal.policy.impl.PhoneWindow$DecorView
我试图应用条件,然后它也不起作用
您必须持续检查后台线程是否正在运行。
if(!isCancelled())
{
super.onProgressUpdate(values);
dialog.setProgress(valueToUpdate);
}
else
{
dialog.dismiss();
dialog=null;
}
在运行调用它的 LoadDataTask 之前显示对话框