2012年7月15日日曜日

ScalaでAndroidのAsyncTaskを使う際に可変長引数でAbstractMethodErrorが発生する件

Androidアプリにて非同期処理を実現しようとするとAsyncTaskを使うわけですが、
Scalaで書こうとすると実行時にAbstractMethodErrorが発生する訳です。
で、これはどうもJava側での可変長引数をScalaでよろしく処理できないためのようで。

てことで検索したら解決策を発見したのでメモ。

https://gist.github.com/1175555

@Override
   protected Result doInBackground(Params... params) {
      return doInBackground(params.length > 0 ? params[0] : null);
   }

   abstract protected Result doInBackground(Params param);


AsyncTaskを継承したJavaクラスを作成し、可変長引数を受け取ったらその1個目の引数を使ってabstractメソッドに処理を移譲しています。