[英]Casting AsyncTask in Android
我的活動中有兩個AsyncTasks
,每個使用不同的參數類型:
private class TaskA extends AsyncTask<Void, byte[], Boolean> { ... }
private class TaskB extends AsyncTask<byte[], byte[], Boolean>
這兩個子類均實現了可從gui線程調用的方法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
Type safety: A generic array of capture#7-of ? is created for a varargs parameter
如何根據switch-case語句將TaskA
正確地myTask
為TaskA
或TaskB
?
更新:
使用以下myTask
初始化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子類應該實現一個聲明它的接口。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.