我的 Activity 中有两个 AsyncTasks
,每个都使用不同的参数类型:
private class TaskA extends AsyncTask<Void, byte[], Boolean> { ... }
private class TaskB extends AsyncTask<byte[], byte[], Boolean>
两个子类都实现了一个可以从 gui 线程调用的方法 public boolean SendDataToNetwork(final byte[] cmd)
。
我希望在我的 Activity 中拥有一个指向 TaskA
或 TaskB
的引用,具体取决于哪些参数会有意传递给我的 Activity 。
到目前为止我所做的尝试是:
private AsyncTask<?, ?, ?> myTask = null;
和
switch(mode) {
case 1:
myTask = new TaskA();
break;
case 0:
myTask = new TaskB();
break;
}
但是,当我尝试稍后在代码中使用
执行myTask
时
myTask.execute();
这会导致编译错误:
类型安全:capture#7-of 的通用数组?是为 varargs 参数创建的
如何根据 switch-case 语句正确地将 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
类型?
最佳答案
如果您希望能够在两种任务类型上调用 SendDataToNetwork,也许您的 AsyncTask 子类应该实现一个声明它的接口(interface)。
关于java - 在 Android 中转换 AsyncTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9702783/