2012-01-03 4 views
2

Я не могу показать свой ProgressDialog, и я не уверен, почему?Почему я не могу увидеть ProgressDialog, используя эту активность?

Кодекс:

public class Activity001 extends Activity implements OnClickListener 
{ 
    public void onClick(View view) 
    { 
    ProgressDialog progressDialog = ProgressDialog.show(Activity001.this, "", "wait ", true, false); 

       // Sending some files to server .. takes time .. - (method that take 1-2 minutes) 

    progressDialog.dismiss(); 

     } 
} 

Может кто-нибудь дать мне руку?

+0

Хорошо, что вы показываете прогресс, но ... вы также скрываете это, прежде чем будет выполнено асинхронное действие ... (у вас проблемы с потоком кода?) ... в вашем примере кода: 1.show progress 2. ** просто запустите ** асинхронную работу. 3.hide progress ... – Selvin

+0

Нет, нет. Извините за недоразумение ... «отправка некоторых файлов» - это какой-то метод, который вызывается, и этот метод занимает время - (1-2 минуты) после того, как этот метод будет выполнен - ​​код отклонит progressdialog. – Yanshof

+1

этот код не будет работать ... это вызовет ANR ... используйте AsyncTask для этого ... есть много примеров здесь или на google ... почему он не работает ... вы просто блокируете поток ui (onclick называется ui thread), а сообщения ui (например, fx. draw, other onclick, ontouch и т. д.) не обрабатываются. – Selvin

ответ

2

Попробуйте это.,

ли это в OnCreate()

 Handler handler; 
handler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     if (msg.what == 0) { 
    Pdialog.dismiss();  


    } 
    }; 

И теперь используют поток для загрузки файлов на сервер. Изменить этот кусок кода,

public class Activity001 extends Activity implements OnClickListener 
{ 
    public void onClick(View view) 
    { 
    ProgressDialog progressDialog = ProgressDialog.show(Activity001.this, "", "wait ", true, false); 
Thread ProgressThread = new Thread() { 
       @Override 
       public void run() { 
        try { 
           // Sending some files to server .. take time .. - (method that take 1-2 minuts) 



        } catch(InterruptedException e) { 
         // do nothing 
        } finally { 

          handler.sendEmptyMessage(0); 
        } 
       } 
      }; 

       ProgressThread.start(); 


     } 

} 

EDIT

диалог Прогресс представляет собой легкий объект веса. Он не имеет приоритета над другими задачами, которые происходят в основном потоке. Например, когда вы вызываете шоу() выполнения диалога выполнения(), за которым следует процесс http или что-то подобное в основном потоке, он не позволит приоритету светлого приоритетного диалога. Таким образом, очевидно, что он появится только в конце процесса http.

+0

: Вы тоже решили мою проблему, на самом деле я не смог уволить прогресс dialog.but, положив увольнение в oncreate () решил мою проблему, можете ли вы объяснить, как это работает? – dd619

2

Вместо этого, лучший способ реализации фоновой задачи с использованием Thread - AsyncTask, который также известен как Painless Threading in Android.

Поскольку это называется безболезненной резьбой, вам не нужно заботиться о управлении потоками.

По вашему требованию, выполните следующие действия: метод

  1. Внутри onPreExecute(), показать прогресс бар или прогресс диалогового метода
  2. Внутри doInBackground(), сделайте файл отправкой задач
  3. Внутри onPostExecute(), выполнить задачу отклонения диалогового окна.
Смежные вопросы