2016-08-14 6 views
0

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

ProgressDialog barProgressDialog; 
     Handler updateBarHandler; 

    public void launchBarDialog() { 
    barProgressDialog = new ProgressDialog(getActivity()); 

    barProgressDialog.setTitle("Downloading Image ..."); 
    barProgressDialog.setMessage("Download in progress ..."); 
    barProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
    barProgressDialog.setProgress(0); 
    barProgressDialog.setMax(20); 
    barProgressDialog.show(); 

    new Thread(new Runnable() { 
     @Override 
     public void run() { 
     try { 
      // Here you should write your time consuming task... 
      while (barProgressDialog.getProgress() <= barProgressDialog.getMax()) { 
      Thread.sleep(2000); 
      updateBarHandler.post(new Runnable() { 
       public void run() { 
       barProgressDialog.incrementProgressBy(2); 
       } 
      }); 
      if (barProgressDialog.getProgress() == barProgressDialog.getMax()) { 
       barProgressDialog.dismiss(); 
      } 
      } 
     } catch (Exception e) { 
     } 
     } 
    }).start(); 
    } 

Но когда я запускаю этот код в моем проекте, я вижу, что ProgressDialog всегда показывать значение 0 в качестве прогресса. Что я не так?

+0

пожалуйста добавить журнал в методе выполнения – Ramit

+0

почему? Зачем? Зачем? Зачем? –

+0

Чтобы убедиться, что вызов метода запуска или нет. – Ramit

ответ

1

Попробуйте следующий код:

private ProgressDialog barProgressDialog; 

public void launchBarDialog() { 
     barProgressDialog = new ProgressDialog(this); 

     barProgressDialog.setTitle("Downloading Image ..."); 
     barProgressDialog.setMessage("Download in progress ..."); 
     barProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
     barProgressDialog.setProgress(0); 
     barProgressDialog.setMax(20); 
     barProgressDialog.show(); 

     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        // Here you should write your time consuming task... 
        while (barProgressDialog.getProgress() <= barProgressDialog.getMax()) { 
         Thread.sleep(2000); 
         barProgressDialog.incrementProgressBy(2); 

         if (barProgressDialog.getProgress() == barProgressDialog.getMax()) { 
          barProgressDialog.dismiss(); 
         } 
        } 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     }).start(); 

     Log.d("", BuildConfig.VERSION_NAME); 
    } 
+0

Это работает, но какая разница? –

+0

IMHO: Вы не отправили код для инициализации объекта 'Handler', а затем я понял, его даже не нужно, поэтому я его удалил. Кроме того, вы ловили все исключения. Я изменил его, чтобы поймать только 'InterruptedException', так что если вы столкнетесь с каким-либо другим исключением, мы получим его трассировку стека. – Shaishav

+0

@ P.Ilyin, и поскольку код выглядел идеально, я бегал и дважды проверял, чтобы убедиться, что он не сломается. – Shaishav