NCMBのKotlin SDKで保存したデータを取得する

NCMBでは各種プラットフォーム向けにSDKを提供しています。iOSであればObjective-CとSwiftがあります。Android向けにはこれまでJava SDKのみでしたが、現在[Kotlin向けにもSDKを開発中](https://github.com/NIFCLOUD-mbaas/ncmb_kotlin)です。

まだ[デベロッパープレビューの段階ですが、先日v0.2.0をリリースしました](https://github.com/NIFCLOUD-mbaas/ncmb_kotlin)ので、それを使ってデータを取得してみました。

## インストール

Android Studioでプロジェクトを開き、以下の手順でSDKをインストールしてください。

1. app/libsフォルダにNCMB.jarをコピーします
2. app/build.gradleファイルに以下を追加します

```
dependencies {
    implementation 'com.squareup.okhttp3:okhttp:4.8.1'
    implementation 'com.google.code.gson:gson:2.3.1'
    api files('libs/NCMB.jar')

    //同期処理を使用する場合はこちらを追加していただく必要があります
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9'
}
```

## クイックスタート

### AndroidManifest.xmlの編集

&lt;application&gt;タグの直前に以下のpermissionを追加します。

```xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
```

### 初期化

ActivityのonCreateメソッド内に以下を記載します。

```kotlin
NCMB.initialize(this.getApplicationContext(),"YOUR_APPLICATION_KEY","YOUR_CLIENT_KEY");
```

* 利用する機能に合わせて使用するライブラリのimport

```kotlin
import com.nifcloud.mbaas.core.NCMB //全機能必須
import com.nifcloud.mbaas.core.NCMBCallback //非同期処理を行う場合
import com.nifcloud.mbaas.core.NCMBException //例外処理を行う場合
import com.nifcloud.mbaas.core.NCMBObject //データストアを利用する場合
import com.nifcloud.mbaas.core.NCMBUser //会員管理を利用する場合
import com.nifcloud.mbaas.core.NCMBGeoPoint //位置情報を利用する場合
import com.nifcloud.mbaas.core.NCMBQuery //検索機能を利用する場合
```


## すでに保存したデータを取得する

データを検索して取得する場合には NCMBQuery を、すでにobjectId（ユニークキー）が分かっている場合にはNCMBObjectのfetch/fetchInBackgroundを使います。

```kotlin
val obj = NCMBObject("TestClass")
obj.setObjectId("99999999")
obj.fetch()
```

## objectIdを取得する

objectIdには専用のgetObjectIdが用意されています。

```kotlin
Log.d("success", "Get: " + obj.getObjectId())
```

## 文字列

文字列の場合はgetStringメソッドを使います。

```kotlin
obj.getString("string")
```

## 数値の場合

数値は get を使います。

```kotlin
val num = obj.get("number")
if (num == 100) {
		Log.d("success", "数値です")
}
```

## 真偽値の場合

真偽値の場合もgetを使います。

```kotlin
val bol = obj.get("boolean")
if (bol == true) {
		Log.d("success", "真偽値です")
}

## 日付型の場合

v0.2.0の時点では日付はJSONObjectになります。その中でisoキーの中に日付文字列が入っています。パーサーは `NCMBDateFormat.getIso8601()` を使うと手軽です。こちらは将来的にはDateTimeなどで取得できるようになるはずです。

```kotlin
val d = obj.get("date") as JSONObject
if (d != null) {
		val parser = NCMBDateFormat.getIso8601()
		Log.d("success", parser.parse(d.getString("iso")).toString())
}
```

## 位置情報

位置情報もJSONObjectで取得できます。こちらは将来的にはNCMBGetPointオブジェクトとして取得できるようになるはずです。

```kotlin
val o = obj.get("geo") as JSONObject
val g = NCMBGeoPoint(o.get("latitude") as Double, o.get("longitude") as Double)
Log.d("success", g.mlatitude.toString())
Log.d("success", g.mlongitude.toString())
```

## 配列やオブジェクト型

配列やオブジェクト型はJSONObjectやJSONArray型で取得できるので、自由に扱えます。

## フィールドの存在チェック

isContainsKeyを使ってフィールドの存在チェックができます。存在しないフィールドにアクセスすると例外処理が発生するので注意してください。

```kotlin
Log.d("success", "Get: " + obj.isContainsKey("string").toString())
```

## まとめ

まだデベロッパープレビューなので、不足している機能はありますが、今後のバージョンアップで随時対応していきます。ぜひKotlinを使ってアプリを開発している方はチェックしてください。

[NIFCLOUD-mbaas/ncmb_kotlin: NIFCLOUD mobile backendのKotlin SDK](https://github.com/NIFCLOUD-mbaas/ncmb_kotlin)