Диалогът за напредък в 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)


Започвате дейност след стартиране на asyctask чрез извикване на doFirstRun(); и по този начин не виждате създадения диалогов прозорец за прогрес. ако премахнете/коментирате частта startActivity по следния начин, тя трябва да работи:


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

Ако все пак искате да започнете тази дейност, тогава трябва да стартирате asynctask след това.

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