2016-04-13 17 views
-3

Çok sayıda çevrimiçi kaynağı kontrol etsem de, sorunu hala bulamıyorum. Görünüşe göre ProgressDialog iyi görünüyor, ancak ilerlemeyi güncellemek istediğimde, onProgressUpdate örneğinde her zaman boştur.ProgressDialog içinde AsyncTask ilerlemesini göstermiyor

package com.async_tasks; 

public class UploadTask extends AsyncTask<Void,Integer,Void> implements Serializable {   
    private static final String TAG = UploadTask.class.getSimpleName(); 
    private ConnectionToServer _connectionToServer; 
    private TransferDetails _td; 
    private Activity _activity; 
    private ProgressDialog _progDialog; 
    private UploadTask _taskInstance; 

    public UploadTask(Activity activity, ConnectionToServer connectionToServer, TransferDetails td) { 

     _activity = activity; 
     _connectionToServer = connectionToServer; 
     _td = td; 
     _taskInstance = this; 
    } 

    @Override 
    protected void onPreExecute() { 

     _progDialog = new ProgressDialog(_activity); 
     String cancel = _context.getResources().getString(R.string.cancel); 

     _progDialog.setCancelable(false); 
     _progDialog.setTitle(_context.getResources().getString(R.string.uploading)); 
     _progDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
     _progDialog.setProgress(0); 
     _progDialog.setMax(100); 
     _progDialog.setButton(DialogInterface.BUTTON_NEGATIVE, cancel, new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 

       _taskInstance.cancel(true); 
      } 
     }); 

     _progDialog.show(); 

    } 

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

     //uploading file ... 
       float percent = (float) (fileSize - bytesToRead)/fileSize * 100; 
       publishProgress((int)percent);     
      } 

     } 
     catch (IOException e) { 
       // Handling exception 
     } finally { 

      if(bis!=null) { 
       try { 
        bis.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
      clearMembers(); 

      } 
     } 

     return null; 
    } 

    @Override 
    protected void onProgressUpdate(Integer... progress) { 

     if(_progDialog!=null) { // <<------------ I suspect for some reason this is always false, as _progDialog is always null - But why?! 
      _progDialog.incrementProgressBy(progress[0]); 
     } 
    } 

    @Override 
    protected void onPostExecute(Void result) { 

     //The task is complete, clear members 
     clearMembers(); 
    } 

    private void clearMembers() { 

     _activity = null; 
     if(_progDialog!=null) { 
      _progDialog.dismiss(); 
      _progDialog = null; 
     } 
    } 
} 

Ve bu MainActivity gelen çağrıdır:

Bu

benim AsyncTask olduğunu

TransferDetails td = (TransferDetails) report.data(); 
ConnectionToServer conn = StorageServerProxyService.getConn(); 
UploadTask uploadTask = new UploadTask(MainActivity.this, conn, td); 
uploadTask.execute(); 
+0

Bu değil http://stackoverflow.com/questions/4538338/progressdialog-in-asynctask adresinden kopyaladığından f onProgressUpdate hook yönteminin içinde progressDialog ile çalışmaya çalışıyorum. Bu benim için sorunsal bir yöntem benim için ne çalıştığına bakılmaksızın progressDialog için null bir referans aldığım ... – Nom1fan

cevap

0

OnPreExecute (Değiştir) olarak aşağıda yöntemi:

@Override 
    protected void onPreExecute() { 

progDialog = new ProgressDialog(ActivityName.this); 
     String cancel = _context.getResources().getString(R.string.cancel); 

     _progDialog.setCancelable(false); 
     _progDialog.setTitle(_context.getResources().getString(R.string.uploading)); 
     _progDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
     _progDialog.setProgress(0); 
     _progDialog.setMax(100); 
     _progDialog.setButton(DialogInterface.BUTTON_NEGATIVE, cancel, new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 

       _taskInstance.cancel(true); 
      } 
     }); 

     _progDialog.show(); 

    } 
+0

Bu AsyncTask, MainActivity içinde değil, ayrı bir sınıfta, yani MainActivity.this burada mümkün değildir. Etkinlik bağlamını setter kullanarak geçirmeyi denedim ve sonra da önerileriniz gibi onPreExecute içindeki örneklemeyi gerçekleştirdim, ancak yine de sorunumu çözmedi. AsyncTask'ım ayrı bir sınıftaysa başka ne yapabilirim? – Nom1fan

+0

Setter yönteminde İçeriği Bağlam olarak değiştirin ve ayrıca, this._context'in türünü Aktivite olarak değiştirin ve ardından bana bildirin ve bana bildirin –

+0

Tamam, deneyip sizi güncelleyeceğim. Yardım etmeye çalıştığınız için çok teşekkür ederim ve sadece bana -1'den başka herkes gibi başka bir şey söylemeden bahsetmiyoruz :) – Nom1fan

İlgili konular