はじめに
Pepper SDK for Android を試してみるのと、そのチュートリアルの「Say "Hello, world!"」を Kotlin で書いてみました。
環境
- macOS Sierra (10.12.1)
- Android Studio 2.2.3
- Pepper SDK 0.9.0
- Kotlin Plugin 1.0.5
参考記事
- Pepper SDK for Android — Pepper SDK for Android documentation
- Pepper SDK for Android Studioを使ってみた - Qiita
- Android開発ではじめるKotlin - Qiita
Say "Hello, world!"
チュートリアルの「Say "Hello, world!"」です。
コード
基本的には Java のコードを元に「Convert Java File to Kotlin File」で変換したものなのですが、Qi.onUiThread() でエラーになるため、キャストして型を合わせて動かしています。そのため FutureFunction が表に出てきしまい、元の Java のコードより無駄な部分があります。
何かもっと良い書き方があるのではないかと思うのですが、教えてください。
SayActivity.kt
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import com.aldebaran.qi.QiCallback
import com.aldebaran.qi.sdk.Qi
import com.aldebaran.qi.sdk.`object`.interaction.Say
import com.aldebaran.qi.FutureFunction
class SayActivity : AppCompatActivity() {
companion object {
private val TAG = "SayActivity"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_say)
val say = Say(this)
say.run("Hello, world!").then(Qi.onUiThread(object : QiCallback<Void>() {
override fun onResult(ignore: Void) {
Log.d(TAG, "result on thread " + Thread.currentThread().name)
}
override fun onError(error: Throwable?) {
Log.e(TAG, "error", error)
}
override fun onCancel() {
Log.w(TAG, "cancel")
}
}) as FutureFunction<Void, Void>)
}
}
実行結果
Robot View
Android Monitor
QiCallback の onResult の出力です。
12-24 02:01:56.661 2096-2130/jp.sandpit.sayhelloworld D/SayActivity: result on thread Thread-191
感想
- (・8・) < Android も Java も Kotlin もまだまだちゅん