Nie jest (ściśle mówiąc) możliwe przekazanie wielu prymitywów do AsyncTask. Na przykład, jeśli chcesz wykonać myTask.execute(long1, long2)
i spróbować skonfigurować private class myTask extends AsyncTask<long, Void, Void>
odpowiednią metodę:
@Override
protected LocationItemizedOverlay doInBackground(long... params) {...}
Twoje IDE prawdopodobnie będzie narzekać na konieczność zastąpienia metody nadrzędnego typu. Zauważ, że używasz tak zwanej sygnatury metody Varargs dla doInBackground
, gdzie (long... params)
jest jak powiedzenie "Akceptuję zmienną liczbę długich znaków, przechowywaną jako tablica zwana params. Nie do końca rozumiem, co powoduje zgłoszenie skargi kompilatora / IDE , ale myślę, że ma to związek ze sposobem Params
zdefiniowania klasy ogólnej .
W każdym razie możliwe jest osiągnięcie tego, co chcesz, bez problemu, pod warunkiem, że poprawnie rzutujesz swoje prymitywy na odpowiadające im niepierwotne opakowania (np. Int => Integer, long => Long itp.). Właściwie nie musisz jawnie rzutować swoich prymitywów na inne niż prymitywy. Wydaje się, że Java sobie z tym poradzi. Wystarczy skonfigurować ASyncTask w następujący sposób (na przykład długie pozycje):
private class MyTask extends AsyncTask<Long, Void, Void> {
@Override
protected void doInBackground(Long... params) {
long myFirstParam = params[0]
}
...
}
Następnie możesz użyć tej klasy zgodnie z pierwotnymi zamierzeniami, np .:
MyTask myTask = new MyTask();
myTask.execute(long1, long2);
Lub dla dowolnej liczby prymitywów, POD warunkiem, że SĄ TEGO SAMEGO TYPU. Jeśli chcesz przekazać wiele typów prymitywów, możesz to również zrobić, ale będziesz musiał zmodyfikować powyższe, aby:
private class MyTask extends AsyncTask<Object, Void, Void> {
@Override
protected void doInBackground(Object... params) {
long myLongParam = (Long) params[0];
int myIntParam = (Integer) params[1];
}
...
}
Jest to bardziej elastyczne, ale wymaga jawnego rzutowania parametrów na ich odpowiednie typy. Jeśli ta elastyczność nie jest potrzebna (np. Pojedynczy typ danych), polecam trzymać się pierwszej opcji, ponieważ jest ona nieco bardziej czytelna.