2015-11-03 8 views
6

Bir parçadan çağrılan bu sınıfa sahibim. Devam eden güncelleme çağrılır, ancak mesaj güncellenmez. Ayrıca herhangi bir ilerleme çubuğu veya çevirici görmüyorum. Sadece başlık ve mesaj, benzer bazı problemler gördü ancak ilerleme çubuğunun hiç göstermediği hiçbir şey yok. Ayrıca, mesajım onProgressUpdate'de hiç güncellenmeyecek, ancak değerleri yazdırmak onProgressUpdate'in içinde artış olduğunu gösteriyor.İlerleme İletişim Kutusu Gösterir, ancak İlerleme Çubuğu Gösterme ve İletisi Güncellenmiyor

Düzenleme: Burada sınıf

private class DownloadFilesTask extends AsyncTask<String, Integer, Long> { 

ProgressDialog progressDialog; 

@Override 
protected void onPreExecute() 
{ 
    progressDialog = ProgressDialog.show(getActivity(), "Downloading","Downloaded 0/"+urls.size(), false); 
    progressDialog.setProgress(0); 
    progressDialog.setMax(urls.size()); 
    progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
} 

@Override 
protected Long doInBackground(String[] urls) { 
    int count = urls.length; 
    long totalSize = 0; 
    for (int i = 0; i < count; i++) { 
      //Do things in background here 
      publishProgress(new Integer[] {i}); 
    } 
    return totalSize; 
} 

@Override 
protected void onProgressUpdate(final Integer... progress) { 
    System.out.println(progress[0]); //This does print correctly 
    getActivity().runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      progressDialog.setProgress(progress[0]); 
      progressDialog.setMessage("Downloaded "+ progress[0] +"/"+urls.size()); 
     } 
    }); 
} 

@Override 
protected void onPostExecute(Long result) { 
    progressDialog.dismiss(); 
    Toast t = Toast.makeText(getActivity(), "Downloaded", Toast.LENGTH_LONG); 
    t.show(); 
} 

}

+1

Görevi nasıl başlattın, lütfen kodu göster. – starkshang

+0

Başladığım yolu göstermek için onu düzenledim, yalnızca bir görevi başlattığın genel yolu, bu yüzden onu eklemedim. Bu hiç yardımcı olmaz mı? – Zach

cevap

3

Sorun, ProgressDialog'unuzun başlatıldığı yoldur.

Bu konudaki OnPreExecute değiştirin:

@Override 
protected void onPreExecute() { 
    progressDialog = new ProgressDialog(activity); 
    progressDialog.setTitle("Downloading"); 
    progressDialog.setMessage("Downloaded 0/" + urls.size()); 
    progressDialog.setIndeterminate(false); 
    progressDialog.setProgress(0); 
    progressDialog.setMax(urls.size()); 
    progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
    progressDialog.show(); 
} 

Esasen, gösteriyi çağırmadan önce setProgressStyle çağırmanız gerekir. Ayrıca, onProgressUpdate, onProgressUpdate UI iş parçacığı üzerinde çalıştırıldığı için runOnUiThread kodunu onProgressUpdate'dan kaldırabilirsiniz.

+0

Wow'un sonunda böyle basit bir sorun olarak adlandırmayı deneyebilirsiniz. Çok teşekkür ederim, ~ 22 saat – Zach

+1

sorabildiğimde lütuf ödeyecek yardım için sevindim - bu zor bir hatadır. Eğer ilgilenirseniz, ProgressDialog kaynağına bir göz atın. Bu konuya neden koştuğunuzu göreceksiniz. https://github.com/android/platform_frameworks_base/blob/master/core/java/android/app/ProgressDialog.java#L324 – Aaron

0

kesin nedeninden emin görevi İşte

DownloadFilesTask download = new DownloadFilesTask(); 
download.execute(urls.toArray(new String[urls.size()])); 

edilmedi başlamak nasıl, ama setProgress için gerekli değildir onProgressUpdate olarak runnable üzerinde UI iş parçacığı üzerinde çalışır.

deneyin Ayrıca

progressDialog.setProgress(progress[0]); progressDialog.setMessage("Downloaded "+ progress[0] +"/"+urls.size());

ile

getActivity().runOnUiThread(new Runnable() { @Override public void run() { progressDialog.setProgress(progress[0]); progressDialog.setMessage("Downloaded "+ progress[0] +"/"+urls.size()); } });

değiştirilmesi - Başka türlü onPostExecute() tarihinde ilişiği kesilir ilerleme göremiyorum, sen doInbackground() bir şeyler ağ yapıyorsunuz.

+0

Aslında bunu daha önce yaptım ama işe yaramadı bu yüzden runonuithread'i denemeye karar verdim. Görüntüleri indiriyorum, bu yüzden bir süre alıyor. Diyalogda, sadece başlıkta ilerleme çubuğu yok, ancak hiçbir ilerleme çubuğu yok. Görüntüleri indirmeyi tamamladıktan sonra sadece – Zach

+0

Tamam kapanır. İlk önce ilerleme diyaloğunu başlatmayı deneyebilir ve 'show()' yi daha sonra 'onPreExecute() ' – sha