AsyncTask'a birden çok temel öğe geçirmek (tam anlamıyla) mümkün DEĞİLDİR. Örneğin , ilgili yöntemi gerçekleştirmek myTask.execute(long1, long2)
ve ayarlamayı denemek istiyorsanız private class myTask extends AsyncTask<long, Void, Void>
:
@Override
protected LocationItemizedOverlay doInBackground(long... params) {...}
IDE'niz büyük olasılıkla bir süper tip yöntemini geçersiz kılmanız gerektiğinden şikayet edecektir. Sözde Varargs yöntem imzasını kullandığınızı unutmayın doInBackground
, burada (long... params)
"Değişken sayıda longları kabul ediyorum, params adı verilen bir dizi olarak depolanır. Bir derleyicinin / IDE şikayetinin ortaya çıkmasına neyin sebep olduğunu tam olarak anlamıyorum , ancak bunun genel sınıfın nasıl Params
tanımlandığı ile ilgisi olduğunu düşünüyorum .
Her durumda, ilkellerinizi ilgili ilkel olmayan sarmalayıcılara doğru şekilde atmanız koşuluyla (örneğin, int => Tamsayı, uzun => Uzun, vb.) İstediğiniz şeyi sorunsuz bir şekilde elde etmek mümkündür. Aslında, ilkellerinizi ilkel olmayanlara açıkça atmanıza gerek yoktur. Java bunu sizin için hallediyor gibi görünüyor. ASyncTask'inizi aşağıdaki gibi ayarlamanız yeterlidir (uzunlar örneği için):
private class MyTask extends AsyncTask<Long, Void, Void> {
@Override
protected void doInBackground(Long... params) {
long myFirstParam = params[0]
}
...
}
Daha sonra bu sınıfı başlangıçta amaçladığınız gibi kullanabilirsiniz, örneğin:
MyTask myTask = new MyTask();
myTask.execute(long1, long2);
Veya istediğiniz herhangi bir sayıda ilkel varlık için, BUNLARIN AYNI TİPTE OLDUĞUNU SAĞLAYIN. Birden fazla ilkel türü geçirmeniz gerekiyorsa, bu da yapılabilir, ancak yukarıdakileri şu şekilde değiştirmeniz gerekecektir:
private class MyTask extends AsyncTask<Object, Void, Void> {
@Override
protected void doInBackground(Object... params) {
long myLongParam = (Long) params[0];
int myIntParam = (Integer) params[1];
}
...
}
Bu daha esnektir, ancak parametrelerin açıkça ilgili türlerine dönüştürülmesini gerektirir. Bu esnekliğe ihtiyaç yoksa (yani tek bir veri türü), biraz daha okunaklı olduğu için ilk seçeneğe bağlı kalmanızı öneririm.