SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

MBaaSと連携するAndroidアプリを作る

MBaaSのデータストアの高度な使い方~リレーショナルなデータを扱う

MBaaSと連携するAndroidアプリを作る 第4回


  • X ポスト
  • このエントリーをはてなブックマークに追加

ダウンロード StampTime_04.zip (2.3 MB)

各タスクのボタンがタップされたときの処理

 各タスクのボタンにsetOnClickListenerメソッドで登録している、onClick時の処理をみていきましょう。

[再掲]リスト4 MainActivity.javaのcreateButtonメソッド
private void createButton(int i,String objId,String taskName) {
    LinearLayout LLayout = (LinearLayout) findViewById(R.id.main_layout);

    Button btn = new Button(this);(4)
    btn.setText(taskName);
    btn.setTag(objId);
    btn.setId(i+1);
    btn.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {   
            // 各タスクのボタンが押されたら
            Button btn0 = (Button) findViewById(0);(5)
            if (btn0.getTag() == null) {
                // タスクが未選択のとき
                // タスク名とObjIdのセット
                Button btn = (Button)v;
                btn0.setText(btn.getText());
                btn0.setTag(btn.getTag());
                btn0.setBackgroundColor(Color.RED);
                getTask((String)btn.getTag());(6)
            } else {
            }
        }
    });
    Space spc = new Space(this);
    LLayout.addView(spc,600,10);
    LLayout.addView(btn,600,160);
}

 btn0はIdが0ですので、「タスクはまだ選択されていません」と表示している一番上のボタンです(5)。そのボタンのgetTagメソッドがnullを返すときは、まだタスクが選択されていない状態なので、選択状態を作って行きます。まず引数として渡ってくるvが押されたボタンなので、Buttonオブジェクトに型変換して、getTextメソッドでタスク名を取得してbtn0にsetTextメソッドでセットします。そして、同様にgetTagメソッドでオブジェクトIDを取得してsetTagメソッドでbtn0にセットします。そして、btn0の背景色をREDにします。これで見た目の変更は完了です。

 たとえば、メールサーバー構築を選ぶと、一番上のボタンの背景色が赤くなり、メールサーバー構築とテキスト表示されています。これがタスクを選んだ状態です。

メールサーバー構築を選んだ
メールサーバー構築を選んだ

 次にNCMBのデータストア上にメールサーバー構築タスクを開始した状態を作成します。getTagメソッドで取得したオブジェクトIDを引数に与え、getTaskメソッドを実行します(6)

 getTaskメソッドでは、やはりクエリを実行するのですが、getInBackgroundメソッドは指定したオブジェクトIDを持つオブジェクトを取得します(1)

リスト5 CurTaskClassのオブジェクトを作成する
private void getTask(String objId) {
    NCMBQuery<NCMBObject> query = NCMBQuery.getQuery("TaskClass");
    query.getInBackground(objId, new GetCallback<NCMBObject>() {(1)
        @Override
        public void done(NCMBObject task, NCMBException e) {
            if (e == null) {
                // 成功
                createCurTask(task);(2)
            } else {
                // エラー
            }
        }
    });

}
private void createCurTask(NCMBObject task) {
    NCMBUser currentUser = NCMBUser.getCurrentUser();(3)
    // ログデータの作成
    NCMBObject curTask = new NCMBObject("CurTaskClass");
    curTask.put("task", task);
    curTask.put("UserName", currentUser.getUsername());
    curTask.put("startTime",new Date() );
    curTask.saveInBackground(new SaveCallback() {
        @Override
        public void done(NCMBException e) {
            if (e == null) {
                // オブジェクト保存成功!
                Toast.makeText(getApplication(), "計測を開始しました!", Toast.LENGTH_SHORT).show();
            } else {
                // 失敗!
                Toast.makeText(getApplication(), "失敗!", Toast.LENGTH_SHORT).show();
            }
        }
    });
}

 指定したオブジェクトIDを持つtaskオブジェクトが取得できたら、そのオブジェクトを引数にcreateCurTaskメソッドを実行します(2)。createCurTaskメソッドでは、まずNCMBUserクラスのgetCurrentUserメソッドで現在ログインしているユーザー情報を取得します(3)。次にCurTaskClassのオブジェクトcurTaskを作成して、Key-Value形式のフィールドをセットしていきます。最初にセットしているtaskがtaskオブジェクトへの参照です。そして、ログインしているユーザー名、startTimeに現在の日時をセットしてsaveInBackgroundメソッドで非同期に保存します。保存できたら、「計測を開始しました!」と表示します。計測を開始しました!と言っても、実は開始日時を記録するだけの処理なのです。

 NCMBのダッシュボードにどのようにtaskオブジェクトへの参照がどのように表現されているかみてみましょう。

 次の図は、メールサーバー構築のボタンをタップしたところです。taskフィールドは参照なので、ポインターを見るとボタンで表示されています。

CurTaskClassにレコードが保存された
CurTaskClassにレコードが保存された

 ポインターを見るボタンをクリックすると、TaskClassのメールサーバー構築タスクが表示されますので、参照がちゃんと保存されていることがわかります。

ポインターを見るボタンをクリックした
ポインターを見るボタンをクリックした

次のページ
選択したタスクの仕事をやめたときの処理

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
MBaaSと連携するAndroidアプリを作る連載記事一覧

もっと読む

この記事の著者

金宏 和實(カネヒロ カズミ)

 富山県高岡市出身で在住。ソフトウェア開発者兼ライター。株式会社イーザー関西学院大学文学部仏文科卒。第一種情報処理技術者(今で言うと、応用情報技術者。第一種→ソフ開→応用と変遷したようだ)主な著書『作ればわかる!Androidプログラミング第2版 -SDK4対応-』『VS 2010で作る Web-DB アプリ入門』『ベテランが丁寧に教えてくれるデータベースの知識と実務』『はじめてのAndroidアプリ作成 センサー活用とクラウド連携』『はじめてのAndroidアプリ作成 基本プログラミング』Web連載『VB2008で楽々Webプログラミング』『再発見!VB2005快適プログラミング』 『こうしろうのMindStroms日記』 個人的なブログはこちらです。 

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8167 2014/10/16 19:47

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング