Диалоговое окно прогресса в AsyncTask не отображается

Я знаю, что была похожая проблема, но я до сих пор не нашел ответа. Проблема в том, что диалоговое окно выполнения этой длительной операции не отображается, но процесс все еще выполняется. Я думаю, что есть проблема с контекстом, но не знаю, как это решить.

public class MainActivity extends Activity {

Utilities uti = new Utilities();
SharedPreferences prefs = null;
private ContactServiceActivity contactService;
ProgressDialog mProgressDialog;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    contactService = new ContactServiceActivity(getApplicationContext());

    doFirstRun();

    Intent i = new Intent(getBaseContext(), ContactListActivity.class);
    startActivity(i);
}

private void doFirstRun() {
    SharedPreferences settings = getSharedPreferences("pl.stxnext.stxcontactsync", MODE_PRIVATE);
    if (settings.getBoolean("isFirstRun", true)) {

        new firstRunTask().execute();

        SharedPreferences.Editor editor = settings.edit();
        editor.putBoolean("isFirstRun", false);
        editor.commit();
    }
}

private class firstRunTask extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        mProgressDialog = new ProgressDialog(MainActivity.this);
        mProgressDialog.setTitle("Trwa synchronizacja danych");
        mProgressDialog.setMessage("Może to zająć chwilę, proszę czekać.");
        mProgressDialog.setIndeterminate(false);
        mProgressDialog.show();
    }

    @Override
    protected Void doInBackground(Void... params) {
        contactService.getAssetsAtFirstRun();
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        mProgressDialog.dismiss();
        uti.showToast(getBaseContext(), "Zapisano kontakty.");
    }
}

}


person filipp.kowalski    schedule 26.07.2013    source источник
comment
попробуйте это.. stackoverflow.com/questions/17585759/   -  person TheFlash    schedule 26.07.2013


Ответы (3)


Вы запускаете действие после запуска асинхронной задачи, вызывая doFirstRun(); , и поэтому вы не видите созданный диалог прогресса. если вы удалите/прокомментируете часть startActivity следующим образом, она должна работать:


doFirstRun();
// comment the following
//Intent i = new Intent(getBaseContext(), ContactListActivity.class);
//startActivity(i);

Если вы все равно хотите начать это действие, вам следует запустить асинхронную задачу после этого.

person Suji    schedule 26.07.2013

создайте один конструктор, например:

Context _context;
public firstRunTask(Context context)
{
    _context=context;
}

и используйте этот _context для контекста в диалоге.

person Armaan Stranger    schedule 26.07.2013

Сделай это-

private class firstRunTask extends AsyncTask<Void, Void, Void> {
ProgressDialog mProgressDialog;
@Override
protected void onPreExecute() {
    super.onPreExecute();
    mProgressDialog=ProgressDialog.show(MainActivity.this, "Trwa synchronizacja danych", "Może to zająć chwilę, proszę czekać.");

}

@Override
protected Void doInBackground(Void... params) {
    contactService.getAssetsAtFirstRun();
    return null;
}

@Override
protected void onPostExecute(Void result) {

   if(mProgressDialog != null)
{
if(mProgressDialog.isShowing())
  {

       mProgressDialog.dismiss();
        uti.showToast(getBaseContext(), "Zapisano kontakty.");}

    }
 }
person Tarun Varshney    schedule 26.07.2013