(厳密に言えば)複数のプリミティブをAsyncTaskに渡すことはできません。たとえば、対応するメソッドを実行myTask.execute(long1, long2)
してセットアップしようとする場合は、次のようにします。private class myTask extends AsyncTask<long, Void, Void>
@Override
protected LocationItemizedOverlay doInBackground(long... params) {...}
IDEは、スーパータイプメソッドをオーバーライドする必要があると不平を言う可能性があります。にいわゆるVarargsメソッドシグネチャを使用していることに注意してください。これはdoInBackground
、(long... params)
「paramsと呼ばれる配列として格納された可変数のlongを受け入れます。コンパイラ/IDEの苦情が発生する原因を完全には理解していません。 、しかし、それはジェネリッククラスParams
がどのように定義されているかに関係していると思います。
いずれの場合も、プリミティブをそれぞれの非プリミティブラッパー(たとえば、int => Integer、long => Longなど)に正しくキャストすれば、問題なく目的を達成できます。実際には、プリミティブを非プリミティブに明示的にキャストする必要はありません。Javaがあなたに代わってそれを処理しているようです。次のようにASyncTaskを設定する必要があります(longの例の場合)。
private class MyTask extends AsyncTask<Long, Void, Void> {
@Override
protected void doInBackground(Long... params) {
// Do stuff with params, for example:
long myFirstParam = params[0]
}
...
}
その後、このクラスを当初の意図どおりに使用できます。例:
MyTask myTask = new MyTask();
myTask.execute(long1, long2);
または、必要な数のプリミティブについては、それらが同じタイプであることが提供されます。複数のタイプのプリミティブを渡す必要がある場合は、これも実行できますが、上記を次のように変更する必要があります。
private class MyTask extends AsyncTask<Object, Void, Void> {
@Override
protected void doInBackground(Object... params) {
// Do stuff with params, for example:
long myLongParam = (Long) params[0];
int myIntParam = (Integer) params[1];
}
...
}
これはより柔軟性がありますが、パラメーターをそれぞれのタイプに明示的にキャストする必要があります。この柔軟性が必要ない場合(つまり、単一のデータ型)、少し読みやすいので、最初のオプションを使用することをお勧めします。