Mobile Data クラウド・サービスを利用して Android アプリを作成する

2014年 7月 02日
PDF (881 KB)
 

「Transcript」のリンクより著者による記事の解説を、日本語で読むことができます。

11:21  |  Transcript
author photo - belinda johnson

Belinda Johnson

Software Engineer, IBM Mobile Cloud Services

@BeeMarieJohnson

author photo - nick gibson

Nick Gibson

Software Engineer, IBM Mobile Cloud Services

 

author photo - andrew huffman

Andrew Huffman

Software Engineer, IBM Mobile Cloud Services

 

IBM Bluemix™ にサインアップ
無償のサービス、ランタイム、インフラを含むクラウド・プラットフォームが、新たなモバイルやウェブ・アプリのクイックな構築とデプロイを実現します。

皆さんは既に Bluemix を使用するメリットをいくつかご存知のことでしょう。Bluemix は、モバイル・アプリケーションと Web アプリケーションを開発、デプロイするための IBM のオープン・プラットフォームです。Bluemix には、あらかじめビルドされたサービスが数多く用意されていて、開発者が簡単にアプリケーションの作成や機能強化を行えるようになっています。この記事では、そのようなサービスの 1 つとして用意されている Mobile Data サービスを利用して Android アプリケーションを作成する手順を説明します。

皆さんは、奥様または旦那様にあの素晴らしいスフレを作ってもらうために食料品店に行ったところ、レシピに必要な材料を正確に思い出せなかったことはありませんか?あるいは、次の日のお弁当にデザートを入れて欲しいと子供たちにリクエストされたことはありませんか?そんなとき、家族で共有している食料品リストに、奥様や旦那様あるいは子供たちが自分たちのリクエストを入力すると、リストが更新されたことを知らせるプッシュ通知を受信できるとしたらどうでしょう?

そこで登場するのが、BlueList アプリケーションです。この Bluemix サービスを利用したシンプルなアプリケーションを出発点に、独自の (より複雑な) アプリケーションを瞬く間に作成することができます。この記事では、Android アプリケーションの作成を始める方法と、そのアプリケーションのオブジェクトをクラウド上に保管して、そのオブジェクトに対して削除、更新、クエリーを実行できるように、アプリケーションに Mobile Data サービスを追加する方法を説明します (今後の記事で、アプリケーションに Push サービスと Node.js Cloud サービスを追加する方法を説明します。これらのサービスを追加すれば、食料品リストが更新されると通知を受けられるようにすることや、いずれかの端末によってリストが何らかの方法で更新されると、すべての端末上でリストが更新されるようにすることが可能になります)。

このシンプルなアプリケーションでは Bluemix サービスを利用して、独自の (より複雑な) アプリケーションを瞬く間に作成できるようになっています。

bluelist-base (v0) コードは、BlueList アプリケーションの基本バージョンです。記事ではこの基本バージョンに Mobile Data サービスを追加する方法を説明します。サービスを追加した後のコードは bluelist-mobiledata (v1) コードのようになります。bluelist-base (v0) を出発点として手順に従っていくことも、直接 bluelist-mobiledata (v1) をダウンロードすることもできます。BlueList アプリケーションの bluelist-mobiledata (v1) バージョンには、Mobile Data サービスが組み込まれています。

アプリケーションを作成するために必要となるもの

 
  • Android 開発についての十分な知識。
  • Android 開発環境。私たちは ADT がインストールされた Eclipse を使用しましたが、遠慮なくお好きな環境を使用してください。
  • bluelist-base (v0) コード。上記のボタンをクリックし、bluelist-android-base コードをお使いの Android 開発環境にインポートして組み込んでください。このコードをエミュレーターで実行してください。アプリケーションを再起動すると、リストの項目が維持されていないことがわかります。この記事の手順に従ってアプリケーションに Mobile Data サービスを追加すると、リストの項目が維持されるようになります。
  • Bluemix の ID。Mobile Data サービスを入手するために必要です。

ステップ 1: Bluemix 上で Mobile Cloud アプリケーションを作成する

 
  1. Bluemix にログインします。

  2. 「Add an application (アプリケーションを追加)」をクリックして、カタログにアクセスします。

    「Add an application (アプリケーションを追加)」ボタンのスクリーン・ショッ
  3. 「Boilerplates (ボイラープレート)」の下にある「Mobile Cloud」をクリックします。

    Mobile Cloud ボイラープレートのスクリーン・ショット
  4. 「CREATE APPLICATION (アプリケーションの作成)」をクリックします。

    「CREATE APPLICATION (アプリケーションの作成)」ボタンがある「Mobile Cloud」アプリケーションのスクリーン・ショット
  5. 「Finish adding Mobile Cloud (Mobile Cloud の追加の完了)」パネルに情報を入力します。それには、「Space (スペース)」フィールドから適当な項目を選択し、アプリケーションの名前を入力してから、「CREATE (作成)」をクリックします。

    「Create application (アプリケーションの作成)」パネルのスクリーン・ショット
  6. 作成したアプリケーションが、ダッシュボードに表示されているはずです。この新規アプリケーションをクリックして、アプリケーションの「OVERVIEW (概要)」ページを表示します。

    カタログに表示されたアプリケーションのスクリーン・ショット
  7. 新規アプリケーションの「OVERVIEW (概要)」ページが表示されたら、「Download SDKs (SDK のダウンロード)」をクリックします。

    「Download SDKs (SDK のダウンロード)」ボタンのスクリーン・ショット

    クリックして大きなイメージを見る

    : この手順では、後ほどこのアプリケーション ID が必要になります。

  8. モバイル・アプリケーションを作成するためのドキュメントが表示されるはずなので、このドキュメントが表示されたら「Android SDK」をクリックします。「Download SDKs (SDK のダウンロード)」ボタンのスクリーン・ショット

    クリックして大きなイメージを見る

  9. ダウンロードした SDK を解凍し、必要な jar ファイル (ibmbaas.jar、ibmdata.jar、および ibmfilesync.jar) を bluelist-android-base プロジェクトの libs フォルダーにコピーします。

    Screen shot of the jar files going into the project
  10. アプリケーションの「OVERVIEW (概要)」ページ (Bluemix 上のページ) から アプリケーション ID をプロジェクトの assets フォルダー内にある bluelist.properties ファイルにコピーします (「OVERVIEW (概要)」ページにアクセスするには、Bluemix にログインしてダッシュボードにアクセスし、対象のアプリケーションをクリックします)。重要な外部データをロードするには properties ファイルが使用されます。ただし、必ずしも properties ファイルを使用しなければならないわけではなく、自分が望む任意のモデルを使用することができます。
    applicationID=<INSERT_APPLICATION_ID_HERE>

ステップ 2: 基本となるアクセス権を追加する

 
  1. Android アプリケーションには、基本的なネットワーク機能とアクセス権が必要です。そのため、以下のアクセス権をマニフェスト・ファイルに組み込んでおきました。AndroidManifest.xml ファイルを開いて確認してください。
    <uses-permission 
        android:name="android.permission.INTERNET" />
    <uses-permission 
        android:name="android.permission.WAKE_LOCK" />
    <uses-permission 
        android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission 
        android:name="android.permission.USE_CREDENTIALS" />
    <uses-permission 
        android:name="android.permission.ACCESS_WIFI_STATE" />

ステップ 3: BlueListApplication を編集して SDK とサービスを初期化し、Mobile Data サービスに対して項目特殊化の登録をする

 
  1. bluelist.properties ファイルから読み取る際に使用する定数をいくつか定義します。
                     	public final class BlueListApplication extends Application {
    	                    private static final String APP_ID = "applicationID";
    	                    private static final String PROPS_FILE = "bluelist.properties";
  2. このアプリケーションの作成時に、アプリケーション ID を取得するために bluelist.properties ファイルから読み取りを行います。そのために onCreate メソッドのコードを編集して、以下のようにします。
    public void onCreate() {
    	super.onCreate();
    	itemList = new ArrayList<Item>();
    	// Read from properties file
    	Properties props = new java.util.Properties();
    	Context context = getApplicationContext();
    	try {
    		AssetManager assetManager = context.getAssets();
    		props.load(assetManager.open(PROPS_FILE));
    		Log.i(CLASS_NAME, "Found configuration file: " + PROPS_FILE);
    	} catch (FileNotFoundException e) {
    		Log.e(CLASS_NAME, "The bluelist.properties file was not found.", e);
    	} catch (IOException e) {
    		Log.e(CLASS_NAME, "The bluelist.properties file could not be read properly.", e);
    	}
  3. Android アプリケーションの作成時に、SDK とサービスの初期化、さらには項目特殊化の登録を行います。そのために onCreate メソッドのコードを編集して、properties ファイルからの読み取りの直後に、以下のコードを挿入します。
    IBMBaaS.initializeSDK(this, props.getProperty(APP_ID));
    IBMData.initializeService();
    Item.registerSpecialization(Item.class);
  4. 手順を進めるなかで、Eclipse を使用してインポートを編成するのを忘れないでください (Ctrl+Shift+O)。これによって、前にプロジェクトにコピーした SDK の jar ファイルから必要な要素が自動的にインポートされます。この時点では、まだいくつかのエラーが表示されるかもしれませんが、手順を進めていくうちにエラーは解決されるはずです。

ステップ 4. Mobile Data サービスを利用するように Item クラスを編集する

 
  1. Mobile Data サービスを統合するには、Mobile Data の IBMDataObject を継承して、このクラスに IBMDataObjectSpecialization というアノテーションを付けます。後でオブジェクトにアクセスするときにキーとして使用する文字列変数 NAME を必ず追加してください。
    @IBMDataObjectSpecialization("Item")
    public class Item extends IBMDataObject {
    	public static final String CLASS_NAME = "Item";
    	private static final String NAME = "name";
  2. getName() メソッドおよび setName() メソッドを編集して、これらのメソッドが Mobile Data サービスで使用可能な getObject メソッドおよび setObject メソッドを使用するようにします。オブジェクトに関連付けられている値を参照するには、キーを使用します。値を設定するには setObject(<key>, <value>) を、値を取得するには getObject(<key>) を使用できます。
    public String getName() {
    	return (String) getObject(NAME);
    }
    public void setName(String itemName) {
    	setObject(NAME, (itemName != null) ? itemName : "");
    }
  3. Item コンストラクターは必要なくなったので削除します。
  4. ここでも忘れずにインポートを編成してください!

ステップ 5. MainActivity クラスで Mobile Data を使用して、クラウド内のデータの作成、読み取り、削除を行う

 
  1. Mobile Data から項目を読み取るために、listItems メソッドを実装します。これらの項目は、大文字と小文字を区別せずにアルファベット順でソートします。listItems を MainActivity クラスのメソッドとして作成します。
    public void listItems() {
    	try {
    		IBMQuery<Item> query = IBMQuery.queryForClass(Item.class);
    		query.findObjectsInBackground(new IBMQueryResult<Item>() {
    			public void onResult(final List<Item> objects) {
    				if (!isFinishing()) {
    					runOnUiThread(new Runnable() {
    						public void run() {
    							//clear local itemList, as we'll be 
                                //repopulating & reordering from MobileData.
    							itemList.clear();
    							for(IBMDataObject item:objects) {
    								itemList.add((Item) item);
    							}
    							sortItems(itemList);
    							lvArrayAdapter.notifyDataSetChanged();
    						}
    					});
    				}
    			}
    			public void onError(IBMDataException error) {
    				Log.e(CLASS_NAME, "Exception : " + error.getMessage());
    			}
    		}); 
    	}  catch (IBMDataException error) {
    		Log.e(CLASS_NAME, "Exception : " + error.getMessage());
    	}
    }
  2. onCreate メソッド内で ArrayAdapter を設定した後、listItems() を呼び出し、Mobile Data を使用して保管済みの項目をリストに取り込みます。
    itemsLV.setAdapter(lvArrayAdapter);
    listItems();
  3. 新規項目を Mobile Data の saveInBackground を使用して作成するように createItem メソッドを変更します。このメソッドには、onResult メソッドと onError メソッドを実装します。
    public void createItem(View v) {
    	EditText itemToAdd = (EditText) findViewById(R.id.itemToAdd);
    	String toAdd = itemToAdd.getText().toString();
    	Item item = new Item();
    	if (!toAdd.equals("")) {
    		item.setName(toAdd);
    		item.saveInBackground(new IBMObjectResult<Item>() {
    			public void onResult(Item object) {
    				if (!isFinishing()) {
    					listItems();
    				}
    			}
    			public void onError(IBMDataException error) {
    				Log.e(CLASS_NAME, "Exception : " + error.getMessage());
    			}
    		});
    		//set text field back to empty after item added
    		itemToAdd.setText("");
    	}
    }
  4. deleteItem メソッドにいくつかの変更を加え、このメソッドが Mobile Data の deleteInBackground メソッドを使用するようにします。このメソッドにも onResult メソッドと onError メソッドを実装します。
    public void deleteItem(Item item) {
    	itemList.remove(listItemPosition);
    	//This will attempt to delete the item on the server
    	item.deleteInBackground(new IBMObjectResult<Item>() {
    		//Called if the object was successfully deleted
    		public void onResult(Item item) {
    			if (!isFinishing()) {
    				runOnUiThread(new Runnable() {
    					public void run() {
    						lvArrayAdapter.notifyDataSetChanged();
    					}
    				});
    			}
    		}
    		//Called if there was an error deleting the item
    		public void onError(IBMDataException error) {
    			Log.e(CLASS_NAME, "Exception : " + error.getMessage());
    			//add error handling here.
    		}
    	});
    	lvArrayAdapter.notifyDataSetChanged();
    }

ステップ 6. EditActivity クラスで、Mobile Data サービスを利用してクラウド上のデータを更新する

 
  1. finishedEdit メソッドは、Mobile Data の deleteInBackground メソッドを呼び出します。このメソッドにも onResult メソッドと onError メソッドを実装します。
    public void finishedEdit(View v) {
    	Item item = itemList.get(location);
    	EditText itemToEdit = (EditText) findViewById(R.id.itemToEdit);
    	String text = itemToEdit.getText().toString();
    	item.setName(text);
    	item.saveInBackground(new IBMObjectResult<Item>() {
    		public void onResult(Item object) {
    			if (!isFinishing()) {
    				runOnUiThread(new Runnable() {
    					public void run() {
    						Intent returnIntent = new Intent();
    						setResult(BlueListApplication.EDIT_ACTIVITY_RC, 
                              returnIntent);
    						finish();
    					}
    				});
    			}
    		}
    		public void onError(IBMDataException error) {
    			Log.e(CLASS_NAME, "Exception : " + error.getMessage());
    		}
    	});
    }

ステップ 7. アプリケーションを実行する

 
  1. これで、必要なコード変更のすべてが完了しました。現時点でコードはbluelist-mobiledata (v1) コードと同じになり、リスト項目が維持されるようになっているはずです。
  2. 最新のコードを、エミュレーター (Nexus 7 または Galaxy Nexus がお勧めです) またはモバイル端末上で実行します。「Run (実行)」 > 「Run As (実行)」 > 「Android Application (Android アプリケーション)」の順に選択します。.
     BlueList アプリケーションの最初のページのスクリーン・ショット
  3. 食料品リストにいくつかの項目を追加します。
     
    食料品リストにいくつかの項目を追加する画面のスクリーン・ショット食料品リストにいくつかの項目が追加された画面のスクリーン・ショット
  4. アプリケーションを再起動します。
  5. データ項目は維持されていることがわかります。データはクラウド上に保管されています!

ステップ 8. クラウド上のデータを表示する

 
  1. Bluemix にログインします。
  2. 「DASHBOARD (ダッシュボード)」ビューでアプリケーションをクリックします。
  3. Mobile Data サービスをクリックします。
  4. 「Manage Data (データ管理)」タブでは、クラウドに保管されているデータ・クラスと、維持されている各データ・クラスのインスタンスが表示されます。 データ・ビューアーのスクリーン・ショット
  5. 「Analytics (アナリティクス)」タブでは、アプリケーションの各種アナリティクス・データが表示されます。その中には、端末ごとの API 呼び出しの合計や、タイプごとの API 呼び出し、ストレージの使用量などが含まれています。 アナリティクス・グラフのスクリーン・ショット

    クリックして大きなイメージを見る

    アナリティクス・グラフのスクリーン・ショット

まとめ

 

このアプリケーションを、Bluemix に用意されている Mobile Data サービスを利用して開発すれば、モバイル・クラウド・サービスを利用してモバイル・データ機能を取り込み、統合するのがいかに簡単であるかがわかるはずです!


関連トピック:この連載の次回の記事 (Push クラウド・サービスを利用して Android アプリを拡張する)

コメントの追加

注意: HTML コードは、コメント内ではサポートされません。


残り 1000 文字

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Mobile development, Cloud computing
ArticleID=967420
ArticleTitle=Mobile Data クラウド・サービスを利用して Android アプリを作成する
publish-date=07022014