0

私はこのクラスを持っています

public final class AsyncTaskManager<T extends AsyncTask<?, ?, ?> & IProgressTrackerTask 
       & ICancelTask> 
....
T mAsyncTask;
....
public void setupTask(T asyncTask) {
    mAsyncTask = asyncTask;
    mAsyncTask.execute();
}
.....

しかし、オンラインで

    mAsyncTask.execute();

エクリプス 言います:

Type safety: A generic array of capture#4-of ? is created for a varargs parameter
add @SuppressWarnings("unchecked")

私はsuppressWarningを追加しましたが、doInBackgoundの実行中にClassCastExceptionが発生しました。ここで
述べたように、AsyncTask を実行する前にすべての型をチェックする必要があります。 問題を解決するにはどうすればよいですか?クラスをジェネリックにして、この警告を無効にしますか? どうもありがとう!

EDITED:使用方法を明確にするためだけに。私は抽象的なAsyncTaskを持っています:

public abstract class ManagedAsyncTask<T, E, G> extends AsyncTask<T, E, G> 
implements IProgressTrackerTask, ICancelTask {

そして、実際の作業を行っている AsyncTask :

public class GetTask extends ManagedAsyncTask<Void, Void, SearchResult> {

そして活動中:

mAsyncTaskManager = new AsyncTaskManager<GetTask>(this, this);
mAsyncTaskManager.setupTask(new GetTask());
4

1 に答える 1

4

executeその一般的な部分についてはよくわかりませんが、AsyncTaskのメソッドが引数としてメソッドのパラメーターを期待しているため、そのエラーが発生していると思いますdoInBackground。これは、 の最初の疑問符の型の配列になりますAsyncTask<?, ?, ?>。にデータを期待していない場合は、コンパイラを満足させるために (本質的に何もない配列) をdoInBackground渡すことができます。(Void[])null

execute()AsyncTaskのメソッドのドキュメントは次のとおりです。それでも問題が解決しない場合は、このページの他の部分が AsyncTask の構成と使用に非常に役立ちます。

http://developer.android.com/reference/android/os/AsyncTask.html#execute%28Params...%29

編集:明確にするために、Voidin(Void[])nullはパラメーターのタイプに関係なくする必要がありますdoInBackground。execute に何も渡していないので、Void をそのパラメータとして使用して、必要なデータがないことを示していると思います。別の方法で実装した可能性があり、それに応じて null をキャストする必要があります。

于 2012-09-12T14:56:10.820 に答える