(Estrictamente hablando) NO es posible pasar múltiples primitivas a AsyncTask. Por ejemplo, si desea realizar myTask.execute(long1, long2)
e intentar configurar private class myTask extends AsyncTask<long, Void, Void>
con el método correspondiente:
@Override
protected LocationItemizedOverlay doInBackground(long... params) {...}
su IDE probablemente se quejará de la necesidad de anular un método de supertipo. Tenga en cuenta que está utilizando la denominada firma del método Varargs para doInBackground
, donde (long... params)
es como decir "Acepto un número variable de longs, almacenado como una matriz llamada params. No entiendo completamente qué causa que se presente una queja de compilador / IDE , pero creo que tiene que ver con cómo Params
se define la clase genérica .
En cualquier caso, es posible lograr lo que desea sin ningún problema, siempre que envíe correctamente sus primitivas a sus respectivas envolturas no primitivas (por ejemplo, int => Integer, long => Long, etc.). En realidad, no es necesario convertir explícitamente sus primitivas en no primitivas. Java parece manejar eso por ti. Solo necesita configurar su ASyncTask de la siguiente manera (para el ejemplo de longs):
private class MyTask extends AsyncTask<Long, Void, Void> {
@Override
protected void doInBackground(Long... params) {
long myFirstParam = params[0]
}
...
}
Luego puede usar esta clase como lo pretendía originalmente, por ejemplo:
MyTask myTask = new MyTask();
myTask.execute(long1, long2);
O para cualquier número de primitivas que desee, SIEMPRE QUE SEAN DEL MISMO TIPO. Si necesita pasar varios tipos de primitivas, esto también se puede hacer, pero deberá modificar lo anterior para:
private class MyTask extends AsyncTask<Object, Void, Void> {
@Override
protected void doInBackground(Object... params) {
long myLongParam = (Long) params[0];
int myIntParam = (Integer) params[1];
}
...
}
Esto es más flexible, pero requiere convertir explícitamente los parámetros a sus respectivos tipos. Si esta flexibilidad no es necesaria (es decir, un solo tipo de datos), recomiendo ceñirse a la primera opción, ya que es un poco más legible.