2011-08-15 22 views
23

Arka plan görevi tamamlandığında kullanıcının yalnızca bittiğini bilmesini sağlamak için Toast'u önceden oluşturmak istiyorum.Bir içeriği bir AsyncTask'a nasıl geçiririm?

AsyncTask için yeni bir sınıf yaptım, ancak bu sınıfta getApplicationContext() kullanamıyorum.

Görevleri çalıştırmak için task.execute(getTempFile(this), getApplicationContext()); kullanıyorum. getTempFile bir File nesnesi döndürür ve içeriği bir Context nesnesi olarak iletmeye çalışıyordum.

Görevlerim, 3 satır AsyncTask<Object, Integer, Integer> içeriğine sahiptir, böylece içerik ikinci nesnede. Ancak, bu uygulamayı çöker.

Düzenleme

public class LocationActivity extends Activity implements LocationListener { 
    protected void handleImage(Bitmap thumbnail){ 
     PushDataToServer task = new PushDataToServer(); 
     task.execute(getTempFile(this), getApplicationContext()); 
    } 
} 




public class PushDataToServer extends AsyncTask<Object, Integer, Integer> { 

    Context context; 

    @Override 
    protected Integer doInBackground(Object... params) { 
     // TODO Auto-generated method stub 
     this.context = (Context) params[1]; 
     File file = (File) params[0]; 
     return null; 
    } 

    protected void onPostExecute(String result) { 
     Toast toast = Toast.makeText(this.context, "All done!", Toast.LENGTH_SHORT); 
     toast.show(); 
    } 

} 
+0

sonrası Lütfen AsyncTask sınıfı ve ana sınıfı iskeleti daha sonra

public class MyTask extends AsyncTask<?, ? ,?> { private Context mContext; public MyTask(Context context) { mContext = context; } } 

ve, kendi AsyncTask inşa edildiğinde :) – Codeman

+0

Soruyu kod örneği ile güncellendi. – dotty

cevap

75

Context nesnesini AsyncTask yapıcısına iletin.

örnek kod:

MyTask task = new MyTask(this); 
task.execute(...); 
+0

Tost hiç gösterilmiyor. Başka fikirlerin var mı? – dotty

+0

"Tost", UI iş parçacığı üzerinde çalışan işlevlerde show() 'ı çağırırken gösterilmelidir. Durumun bu olduğundan emin misin? – Wroclai

+0

Tost, onPostExecute() yöntemimde. Kod örneği yukarıda. – dotty

0

Sen bağlam ikinci nesne olduğunu söylemek, henüz ikinci nesne tamsayı olduğunu. Bu senin problemin olabilir mi? Ayrıca - başka bir öneri AsyncTask sınıfınızı faaliyetinize özel bir iç sınıf olarak koymaktır - bu şekilde getApplicationContext() öğesine erişeceğinizden oldukça eminim.

2

Bir yöntem parametresi olarak değil, yapıcıya aktarın. O zaman jenerik parametrelere bağlı olmanız gerekmez.

İlgili konular