Я предполагаю, что taskLiteApplication.setData ();работает в потоке пользовательского интерфейса вместо фонового потока или работает в фоновом потоке, и вызывается отмена, потому что он отменяется в потоке пользовательского интерфейса.
Основной поток для устранения проблемы:
private ProgressDialog dialog; // Keep this global
private Handler mHandler;
void doStuff() {
dialog = ProgressDialog.show(TabLayoutActivity.this, "", "Loading. Please wait...", true);
mHandler = new Handler()
{
@Override public void handleMessage(Message msg) {
if (msg.obj != null) {
dialog.dismiss();
//change view
Intent myIntent = new Intent(TabLayoutActivity.this, TabLayoutActivity.class);
TabLayoutActivity.this.startActivity(myIntent);
}
}
};
//refresh the view
Thread t = new Thread(new Runnable() {
@Override public void run() {
// Assuming setData does NOT run on it's own background thread
taskLiteApplication.setData();
Message message = Message.obtain();
message.obj = "DONERAEREAR";
mHandler.sendMessage(message);
}
})};
t.start();
}
EDIT Добавлен обработчик, как указал Wizetux, диалог должен быть отменен в потоке пользовательского интерфейса
Преимущество заключается в том, что вы можете отправлять сообщения об ошибках обработчика, предупреждаясообщения, последующие сообщения и обрабатывать соответственно.
EG
message.obj = "ERROR";
mHandler.sendMessage(message);
затем в обработчике
if ((String)msg.obj.equals("ERROR")) { /* Handle Error */ }