2015-05-02 26 views
6

Aynı Asynctask'i sırayla yürütmeye çalışıyorum. Örneğin, bir Asynctask A olsun. Şimdi, bazı sunucu meşgul olup olmadığını A kontrol edin. Meşgulse, tekrar kontrol eder .... Ve böyle devam eder. Bunu 5 kez kontrol edip, kullanıcıların servisin müsait olmadığını bilmelerini sağlayın.
Aynı şekilde Asynctask açıkça kullanılabilir. Bu link,
Asynctask göre beklenmeyen bir sonuç verebilir döngüler ile gerçekleştirmeye çalışmak
bir yangın ve unutmak örneği ve AsyncTask örnekleri yalnızca bir kez kullanılabilir.
.
Yani 5 kez döngü yapmak Asynctask 5 kez çağrılacak demektir. Ancak sunucu, 2. denemede ücretsiz ise, ek kontrole ihtiyacım yok. Ayrıca android uygulaması asılabilir (benimki). Bu konuda yanılıyorsam beni düzeltin.
Aynı Asynctask'ı sırayla birden çok kez çalıştırma

Ayrıca cevap oldu "calling task like new MyAsyncTask().execute("");" ben böyle yaparsak
Yani - O sırayla 5 kez çağrılmalıdır

new someAsyncTask() { 
      @Override 
      protected void onPostExecute(String msg) { 
       new someAsyncTask() { 
        @Override 
        protected void onPostExecute(String msg) { 
         ....and so on 5 times. 
        } 
       }.execute(this); 
      } 
     }.execute(this); 

örneğin ve herhangi bir sorun meydana gelmeyecek.
Bunu yapmanın tek yolu bu mu yoksa başka bir çözüm mevcut mu?

private int count; 
private void attemptConnect(){ 
    count = 0; 

    new MyTask().execute(""); 
} 

class MyTask extends AsyncTask<String, String, String> { 
    @Override 
    protected String doInBackground(String... params) { 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String s) { 
     count++; 
     if(count < 5){ 
      new MyTask().execute(""); 
     } 
    } 
} 

Veya AsyncTask kurucusuna bir sayıma geçmesine:

cevap

4

Sen dış sınıfta bir alan değişkenini kullanabilirsiniz i bu işe yarar anonim asynctask kullanırsanız

private void attemptConnect(){ 
    new MyTask(0).execute(""); 
} 

class MyTask extends AsyncTask<String, String, String> { 
    private int count; 

    public MyTask(int count){ 
     this.count = count; 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String s) { 
     if(count < 4){ 
      new MyTask(++count).execute(""); 
     } 
    } 
} 
+0

? Soruda sağlanan örnekte, diğer java sınıfında asynctask sınıfını uyguladık. Sadece başka bir sınıfta kullandım. Bu orada çalışacak mı? çünkü o zaman tekrar 'onPostExecute' yazmalıyım. –

+0

Bağımsız bir sınıf için çalışacak bir alternatif yayınladım. – tachyonflux

+0

Ancak anonim Asynctask kullanıyorum. ve bağımsız sınıf onPostExecute geçersiz kılındı. geçersiz kılan başka bir sınıfta yapıldı. Sağladığınız örnek, onPostExecute bağımsız sınıftaysa çalışır. Ama anonim Asynctask üzerinde çalışacak mı? –

İlgili konular