2016-11-17 6 views
0

Я сделал класс AsyncTask со следующим кодомProgressDialog new Activity Asynctask не показывает, почему?

public class removeDialog extends AsyncTask<Void, Void, Void> { 

Context c; 
ProgressDialog asyncDialog; 
String page; 

public removeDialog(Context c, String page) { 
    this.c = c; 
    this.page = page; 

    asyncDialog = new ProgressDialog(c); 
} 

@Override 
protected void onPreExecute() { 
    //set message of the dialog 
    asyncDialog.setTitle("Please wait"); 
    asyncDialog.setMessage("Loading..."); 
    asyncDialog.setCancelable(false); 
    //show dialog 
    asyncDialog.show(); 

    if (page == "algemeneVoorwaarden") { 
     Intent intent = new Intent(c, algemeneVoorwaarden.class); 
     c.startActivity(intent); 
    } 
    if (page == "contact") { 
     Intent intent = new Intent(c, contactTest.class); 
     c.startActivity(intent); 
    } 

    super.onPreExecute(); 
} 

@Override 
protected Void doInBackground(Void... arg0) { 

    //don't touch dialog here it'll break the application 
    //do some lengthy stuff like calling login webservice 

    return null; 
} 

@Override 
protected void onPostExecute(Void result) { 
    //hide the dialog 
    asyncDialog.dismiss(); 

    super.onPostExecute(result); 
} 
} 

Первый раз я попробовал: в первый раз, когда я вижу ProgressDialog, но второй раз я хочу открыть свою деятельность, я ничего не получаю.

Второй раз я пробовал: Я не получаю ProgressDialog даже в первый раз, когда я пытаюсь.

Я исполняю свой код в классе AsyncTask, код:

voorwaarden.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       new removeDialog(c, "algemeneVoorwaarden").execute(); 
      } 
     }); 

Кто-то знает, почему он не работает? Пожалуйста, помогите мне.

+0

Является ли 'removeDialog' именем вашего производного класса AsyncTask? Было бы неплохо, если бы вы могли разместить заголовок своего класса. – Milack27

+0

Это имя класса. – sander

+0

Хорошо. Ну, в вашем 'onPreExecute', вы показываете диалог и начинаете новое действие. Я могу ошибаться, но я думаю, что ваш диалог отображается внутри первого действия, поэтому, когда вы начинаете новый, ваш диалог остается позади. – Milack27

ответ

1

Ваш диалог будет отклонен, как только он будет показан, потому что ваш doInBackground пуст. Попробуйте добавить Thread.sleep() с несколькими секундами, просто чтобы имитировать задержку.

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

public class RemoveDialog extends AsyncTask<Void, Void, Void> { 

    ProgressDialog asyncDialog; 

    public RemoveDialog(Context c) { 
     asyncDialog = new ProgressDialog(c); 
    } 

    @Override 
    protected void onPreExecute() { 
     //set message of the dialog 
     asyncDialog.setTitle("Please wait"); 
     asyncDialog.setMessage("Loading..."); 
     asyncDialog.setCancelable(false); 

     //show dialog 
     asyncDialog.show(); 

     super.onPreExecute(); 
    } 

    @Override 
    protected Void doInBackground(Void... arg0) { 

     try { 
      Thread.sleep(3000); 
     } 
     catch (InterruptedException ex) { 
      ex.printStackTrace(); 
     } 

     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     //hide the dialog 
     asyncDialog.dismiss(); 

     super.onPostExecute(result); 
    } 
} 
+1

NICE JOBBBB !!!!! ха-ха – sander