AndroidではJavaの他、Kotlinも公式言語としてサポートされています。KotlinはJVM上で動作する静的な型付け言語で、言語体系がSwiftに似ています。そのため、Swiftに慣れた開発者であればすぐに習得できるかと思います(似ているので逆に戸惑う部分もあるのですが)。
今回はAndroid Studio 3系を使い、KotlinでNCMBを利用する方法を解説します。今回はデータストアのオブジェクト同士を連携させる技術の一つ、ポインターの使い方を紹介します。
Android Studioでプロジェクトを作成する
Android Studio 3系からKotlinプラグインをインストールせずにKotlinプロジェクトを作成できるようになりました。まずは新しいプロジェクトを作成します。
新しいプロジェクトを作成する際にInclude Kotlin Supportをチェックします。これでKotlinベースのコードが生成されます。
他はデフォルトのままです。Phone and Tabletを対象にし、 APIはある程度新しいもの(今回は23)を選択します。
さらにベースは何もなし、Empty Activityを選択します。
Activity NameはMainActivity、Layout Nameはactivity_mainというのもデフォルトのままです。
NCMBを追加する
プロジェクトが作成されたらファイルツリーを右クリックして、Open Module Settingsを選択します。
開いたウィンドウで、上にあるプラスアイコンをクリックします。
そしてImport .JAR/.AAR Packageを選択します。
次のダイアログでNCMB.jarを選択します。NCMB.jarはこちらからダウンロードし、解凍します。
追加すると、左側のメニューでappの下にNCMBが追加されます。ついでDependenciesをクリックします。
下にあるプラスアイコンをクリックし、Module dependencyを選択します。
モジュールの選択でNCMBを選びます。
一覧にNCMBが追加されたら完了です。
セキュリティ設定を変更する
AndroidManifest.xml
を開いて設定を追加します。これはインターネット接続を用いる設定です。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="jp.moongift.ncmbupdatedatastore"> <!-- 以下の uses-permission を追加 --> <uses-permission android:name="android.permission.INTERNET" /> <application : /> </manifest>
これで準備完了です。
SDKをインポートする
まずNCMBを利用する画面のKotlinファイルを開きます。今回は MainActivity.kt
を編集します。今回は基礎になる NCMB クラスと、データストアで用いる NCMBObject クラスを読み込んでいます。
import com.nifcloud.mbaas.core.NCMB import com.nifcloud.mbaas.core.NCMBObject
そして override fun onCreate
の内容を編集します。 APPLICATION_KEY
、CLIENT_KEY
はそれぞれのキーに書き換えてください。
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 初期化 NCMB.initialize(applicationContext, "APPLICATION_KEY", "CLIENT_KEY")
今回は認証ユーザ(匿名ユーザ)に対してデータを追加します。まず連携させるデータを保存します。問題がなければ、下記の 保存完了
というところに進むでしょう。
var user = NCMBUser.getCurrentUser() var obj = NCMBObject("Setting") obj.put("Key", "Setting Value") obj.saveInBackground {e -> if (e != null) { Log.d("[ERROR]", obj.toString()) } else { // 保存完了 } }
後は連携先であるユーザデータにオブジェクトを登録するだけです。
user.put("setting", obj) user.saveInBackground {e -> if (e != null) { Log.d("[ERROR]", user.toString()) } else { Log.d("[DEBUG]", "Data save successful!") } }
ポインターデータの取り出し方
では次にポインターとして保存したデータの取り出し方です。今回の場合は連携先であるユーザデータを取り出します。その際、 setIncludeKey
を使ってポインターになっているカラムを指定します。
var user = NCMBUser.getCurrentUser() user.getIncludeObject<NCMBObject>("Setting") var query = NCMBQuery<NCMBObject>("user") query.whereEqualTo("objectId", user.getString("objectId")) query.setIncludeKey("setting")
そして検索を行えば、getIncludeObject
を使ってNCMBObjectが取り出せます。
query.findInBackground {users, e -> if (e != null) { Log.d("[ERROR]", users[0].toString()) } else { Log.d("[DEBUG]", users[0].getIncludeObject<NCMBObject>("setting").getString("Key")) } }
まとめ
ポインターの保存はとても簡単で、オブジェクトをそのまま当てはめるだけです。取得する際にはクエリの時点でsetIncludeKeyを使うことと、取り出した後にgetIncludeObjectを使うのがポイントになります。データを細かく管理する上でもポインターは大事な機能になります。ぜひ使いこなしてください。