- ニフティクラウドmobile backendの機能『データストア』を学習するための問題集です
- ニフティクラウドmobile backendの利用登録(無料)が必要です。
- 問題用プロジェクトにはオンラインランキング機能が実装されていない状態の「連打ゲーム」です
- 既に実装済みのニフティクラウドmobile backendを利用するための準備(SDK導入など)方法の詳細はこちらをご覧ください。
- 問題は2問あります
- 2問クリアすると「連打ゲーム」にオンラインランキング機能を実装したアプリが完成します
- 問題を取り組む上で必要な開発環境は以下です
- AndroidStudio ver.1.4 以上
▼問題用プロジェクト▼
- 上記リンクをクリックしてzipファイルをローカルに保存します
- zipファイルを解凍して、AndroidStudioを開き,「Open an existing AndroidStudio project」を選択し、解凍したプロジェクトを開きます。
- プロジェクトをビルドし、「連打ゲーム」で遊んでみましょう
- 「START」ボタンをタップします
- 「3」,「2」,「1」とカウントダウンし、「スタート!」からタイムアップ!の10秒間「◎」の部分がタップできるようになります
- 10秒間の間に何回タップできるかを競う単純なゲームです
- 10秒経つと名前を入力するアラートが表示されますので、入力し「OK」をクリックします
- 「SHOW RANKING」ボタンをタップすると、画面に名前とスコアが表示されます。
※注意:問題に取り組む前の状態では「SHOW RANKING」ボタンをタップしてもランキングは表示されません
- ニフティクラウドmobile backendにログインしアプリの新規作成を行います
- アプリ名はわかりやすいものにしましょう。例)「renda」
- アプリが作成されるとAPIキーが2種類(アプリケーションキーとクライアントキー)発行されます
- 次で使用します。
MainActivity.java
のonCreate
を編集します- 先程ニフティクラウドmobile backendのダッシュボード上で確認したAPIキーを貼り付けます
- それぞれ
YOUR_APPLICATION_KEY
とYOUR_CLIENT_KEY
の部分を書き換えます - このとき、ダブルクォーテーション(
"
)を消さないように注意してください!
MainActivity.java
を開きます。下図の__saveScore
メソッドを編集し、引数のname
(アラートで入力した名前)とscore
__(連打ゲームでタップした回数)の値をmBaaSに保存する処理をコーディングしてください
- データストアに保存先クラスを作成します
- クラス名は「
GameScore
」としてください name
を保存するフィールドを「name
」、score
を保存するフィールドを「score
」として保存してください
- ニフティクラウドmobile backendのキュメントのドキュメントページをご活用ください
- データストア(Android):基本的な使い方
問題1のコーディングが完了したら、下記の作業を行います
__【作業1-1】__それぞれ該当する箇所に以下の処理を追記して、実行時にアラートを表示できるようにします
- 保存に失敗した場合の処理を行う箇所に追記
// 保存に失敗した場合の処理
Log.e("NCMB", "保存に失敗しました。エラー:" + e.getMessage());
- 保存に成功した場合の処理を行う箇所に追記
//保存が成功した場合の処理
Log.i("NCMB", "保存に成功しました。");
__【作業1-2】__エミュレーターで実行、「Start」ボタンを押してゲームを遊びます
-
名前を入力し、「OK」がクリックされると【問題1】で作成した
saveScore
メソッドが呼ばれ、データが保存されます -
このとき下記のいずれかのログが出力されます
-
「
保存に成功しました。
」の場合は保存成功です -
「
保存に失敗しました。エラー : ************
」の場合は保存失敗です
※エラーコードが出た場合はこちらで確認できます
▼答えはこちら▼
RankingActivity.java
を開きます。下図のcheckRanking
メソッドを編集し、データストアのGameScore
クラスに保存したname
とscore
のデータをscore
の降順(スコアの高い順)で検索・取得する処理をコーディングしてください
- 検索データ件数は5件とします
- ニフティクラウドmobile backendのキュメントのドキュメントページをご活用ください
- データストア(Android):基本的な使い方
- データストア(Android):ランキングを作る
問題2のコーディングが完了したら、下記の作業を行います
__【作業2-1】__該当する箇所に以下の処理を追記して、実行時にAndroidStudio上にログを表示できるようにします
- 検索に失敗した場合の処理を行う箇所に追記
// 検索に失敗した場合の処理
Log.e("NCMB", "検索に失敗しました。エラー:" + e.getMessage());
- 検索に成功した場合の処理を行う箇所に追記
// 検索に成功した場合の処理
Log.i("NCMB", "検索に成功しました。");
__【作業2-2】__エミュレーターで実行し、「ランキングを見る」ボタンをタップします
-
画面起動後、
checkRanking
メソッドが呼ばれ、【問題1】で保存されたデータが検索・取得されます -
このとき下記のいずれかのログが出力されます
-
「
検索に成功しました。
」が表示された場合は検索成功です -
「
検索に失敗しました。エラー:************
」が表示された場合は検索失敗です
※エラーコードが出た場合はこちらで確認できます
- 検索の状態(成功・失敗)に関係なく、「SHOW RANKING」ボタンをタップしても、まだランキングは表示されません
__【作業2-3】__検索に成功したら、該当する箇所に以下の処理を追記して、取得した値から必要なデータを取り出し、ランキング画面へ反映させます
- 検索に成功した場合の処理を行う箇所に追記
//ListViewオブジェクトの取得
ListView lv = (ListView)findViewById(R.id.lstRanking);
// ループカウンタ
ArrayAdapter<String> adapter = new ArrayAdapter<String>(RankingActivity.this, android.R.layout.simple_list_item_1);
for (int i = 0, n = objects.size(); i < n; i++) {
NCMBObject o = objects.get(i);
Log.i("NCMB", o.getString("name"));
// 処理
String name = o.getString("name");
Integer score = o.getInt("score");
adapter.add(name + " さん : " + score.toString() + " (point)");
}
lv.setAdapter(adapter);
__【作業2-4】__エミュレーターで実行、「ランキングを見る」ボタンを押します
- 先ほどのスコアが表示されれば完成です!おめでとうございます★
▼答えはこちら▼
- 問題の回答を実装した完全なプロジェクトをご用意しています
▼完成版プロジェクト▼
- APIキーを設定してご利用ください