java - 在 Android 中转换 AsyncTask

标签 java android generics casting android-asynctask

我的 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 中拥有一个指向 TaskATaskB 的引用,具体取决于哪些参数会有意传递给我的 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 转换为 TaskATaskB

更新:

初始化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 从未真正转换为 TaskATaskB 类型?

最佳答案

如果您希望能够在两种任务类型上调用 SendDataToNetwork,也许您的 AsyncTask 子类应该实现一个声明它的接口(interface)。

关于java - 在 Android 中转换 AsyncTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9702783/

相关文章:

单击 1 次后 JavaFX 刷新按钮消失

java - 如何在 java-client 7.0.0 中使用 appium 中的向下滑动/向下滚动?

android - com.segment.analytics.android :analytics error while submitting my app to Google Play Console

android - 在 Android 上开发和生产期间的不同配置值

java - Java 泛型与 C++ 模板有何不同?为什么我不能使用 int 作为参数?

java - SpringBoot 和 Spring Security 未进行身份验证

java - JNI 方法帮助。带有目标偏移量的 Memcpy

java - 拍照并命名

generics - 当主构造函数是通用的时,如何在 Kotlin 中制作具体的辅助构造函数?

c# - 泛型的反/协方差问题