(Строго говоря) НЕ возможно передать несколько примитивов в AsyncTask. Например, если вы хотите выполнить myTask.execute(long1, long2)
и попробовать настроить private class myTask extends AsyncTask<long, Void, Void>
с помощью соответствующего метода:
@Override
protected LocationItemizedOverlay doInBackground(long... params) {...}
ваша IDE, скорее всего, будет жаловаться на необходимость переопределения метода супертипа. Обратите внимание, что вы используете так называемую сигнатуру метода Varargs для doInBackground
, где (long... params)
это все равно что сказать: «Я принимаю переменное количество long, хранящееся в виде массива с именем params. Я не совсем понимаю, что вызывает жалобу компилятора / IDE. , но я думаю, это связано с тем, как общий классParams
.
В любом случае можно без проблем достичь желаемого, при условии, что вы правильно приведете свои примитивы к их соответствующим непримитивным оболочкам (например, int => Integer, long => Long и т. Д.). На самом деле, вам не нужно явно приводить примитивы к не примитивам. Кажется, Java справится с этим за вас. Вам просто нужно настроить ASyncTask следующим образом (на примере long):
private class MyTask extends AsyncTask<Long, Void, Void> {
@Override
protected void doInBackground(Long... params) {
long myFirstParam = params[0]
}
...
}
Затем вы можете использовать этот класс так, как вы изначально планировали, например:
MyTask myTask = new MyTask();
myTask.execute(long1, long2);
Или для любого количества примитивов, которое вы хотите, ПРИ условии, что они одного типа. Если вам нужно передать несколько типов примитивов, это также можно сделать, но вам нужно будет изменить приведенное выше, чтобы:
private class MyTask extends AsyncTask<Object, Void, Void> {
@Override
protected void doInBackground(Object... params) {
long myLongParam = (Long) params[0];
int myIntParam = (Integer) params[1];
}
...
}
Это более гибкий вариант, но требует явного приведения параметров к соответствующим типам. Если такая гибкость не требуется (например, один тип данных), я рекомендую придерживаться первого варианта, так как он немного более читабелен.