У меня есть два AsyncTasks
в моей деятельности, которые используют различные типы аргументов: каждыйКастинг AsyncTask в Android
private class TaskA extends AsyncTask<Void, byte[], Boolean> { ... }
private class TaskB extends AsyncTask<byte[], byte[], Boolean>
Оба суб-классы реализации методы public boolean SendDataToNetwork(final byte[] cmd)
, который может быть вызван из графического интерфейса потока.
Я хотел бы иметь ссылку в моей деятельности, которая указывает либо TaskA
, либо TaskB
в зависимости от того, какие аргументы передаются моей деятельности с намерением.
То, что я действительно пытался до сих пор:
private AsyncTask<?, ?, ?> myTask = null;
и
switch(mode) {
case 1:
myTask = new TaskA();
break;
case 0:
myTask = new TaskB();
break;
}
Однако, когда я пытаюсь выполнить myTask
позже в коде с
myTask.execute();
это приводит к ошибка компиляции: Type safety: A generic array of capture#7-of ? is created for a varargs parameter
Как я могу правильно наложить myTask
на TaskA
или TaskB
в соответствии с заключением оператора switch-case?
Update:
Initializing myTask
с:
private AsyncTask myTask = null;
доходность к одно предупреждение:
myTask= new TaskA();
myTask.execute();
The method execute(Object...) belongs to the raw type AsyncTask. References to generic type AsyncTask<Params,Progress,Result> should be parameterized
Если я пытаюсь использовать метод SendDataToNetwork
я получаю сообщение об ошибке Сейчас:
The method SendDataToNetwork(byte[]) is undefined for the type AsyncTask
Похоже, что объект myTask
никогда не отливается к типу TaskA
или TaskB
?
Вам нужно показать нам больше кода. Предупреждение указывает, что вы используете метод с параметром varargs. Вы должны это показать. – newacct
Не используйте общий синтаксис define myTask, то есть private AsyncTask myTask = null; – yorkw
См. Обновленный код выше. – Flo