Кастинг AsyncTask в Android - PullRequest
       0

Кастинг AsyncTask в Android

0 голосов
/ 14 марта 2012

У меня есть два AsyncTasks в моей деятельности, каждый из которых использует разные типы аргументов:

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 в соответствии с оператором переключения?

Обновление:

Инициализация 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?

1 Ответ

1 голос
/ 15 марта 2012

Если вы рассчитываете на возможность вызова SendDataToNetwork для обоих типов задач, возможно, ваши подклассы AsyncTask должны реализовать интерфейс, который объявляет это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...