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

2014年 10月 02日
PDF (790 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

@ndgibs on Twitter
Follow me on Google+

author photo - andrew huffman

Andrew Huffman

Software Engineer, IBM Mobile Cloud Services

 

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

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

見る:Webcast: Building an Android App using MobileData Cloud

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

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

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

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

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

 
  • Android 開発についての十分な知識。
  • Android 開発環境。私たちは ADT がインストールされた Eclipse を使用しましたが、お好きな環境を使用していただいて構いません。: Android Studio を使用する場合は、Android のルート・ディレクトリーにある gradle.build ファイルによって、必要な依存関係が取り込まれるはずなので、ステップ 1 の 7 から 9 までをスキップすることができます。以上の点を確かめ、Gradle ビルド・コードを理解した上で、必要な依存関係に関するコードのコメントを解除してください。
  • bluelist-base (v0) コード。上記のボタンをクリックし、bluelist-android-base コードをお使いの Android 開発環境にインポートして組み込んでください。このコードをエミュレーターで実行してください。アプリケーションを再起動すると、リストの項目が維持されていないことがわかります。このチュートリアルの手順に従ってアプリケーションに IBM Mobile Data for Bluemix サービスを追加すると、リストの項目が維持されるようになります。
  • Bluemix の ID。IBM Mobile Data for Bluemix サービスを入手するために必要です。

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

 
  1. Bluemix にログインします。
  2. 「Create an Application (アプリケーションを作成)」をクリックして、カタログにアクセスします。 「Create 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 のダウンロード)」をクリックします (Android Studio を使用している場合は、スキップしてください)。
    「Download SDKs (SDK のダウンロード)」ボタンのスクリーン・ショット

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

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

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

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

  9. ダウンロードした SDK を解凍し、必要な jar ファイル (ibmbluemix.jar、ibmdata.jar、および ibmfilesync.jar) を bluelist-android-base プロジェクトの libs フォルダーにコピーします (Android Studio を使用している場合は、スキップしてください)。プロジェクトに組み込まれた jar ファイルのスクリーン・ショット
  10. applicationID、applicationSecret、applicationRoute の値をプロジェクトの assets フォルダー内にある bluelist.properties ファイルにコピーします。applicationRoute と applicationID の値は、アプリケーションの「OVERVIEW (概要)」ページに表示されます。applicationSecret は、アプリケーションの「Mobile Application Security (モバイル・アプリケーション・セキュリティー)」ページにのみ表示されます。これらの値を入手するには、Bluemix にログインしてダッシュボードにアクセスし、対象のアプリケーションをクリックします。すると、applicationRoute と applicationID の値は、「OVERVIEW (概要)」ページの上部に表示されるはずです。applicationSecret 値を入手するには、ナビゲーション領域で「Mobile Application Security (モバイル・アプリケーション・セキュリティー)」リンクをクリックします。重要な外部データをロードするには、properties ファイルを使用します。
    					applicationID=<INSERT_APPLICATION_ID_HERE>
    					applicationSecret=<INSERT_APPLICATION_SECRET_HERE>
    					applicationRoute=<INSERT_APPLICATION_ROUTE_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 とサービスを初期化し、IBM Mobile Data for Bluemix サービスに対して項目特殊化の登録をする

 
  1. bluelist.properties ファイルから読み取る際に使用する定数をいくつか定義します。
     public final class BlueListApplication extends Application {
    	private static final String APP_ID = "applicationID";
    	private static final String APP_SECRET = "applicationSecret";
    	private static final String APP_ROUTE = "applicationRoute";
    	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 ファイルからの読み取りの直後に、以下のコードを挿入します。
    // initialize the IBM core backend-as-a-service
    IBMBluemix.initialize(this, props.getProperty(APP_ID), 
    					props.getProperty(APP_SECRET), props.getProperty(APP_ROUTE));
    // initialize the IBM Data Service
    IBMData.initializeService();
    // register the Item Specialization
    Item.registerSpecialization(Item.class);
  4. 手順を進めるなかで、Eclipse を使用してインポートを編成するのを忘れないでください (Ctrl+Shift+O)。これによって、前にプロジェクトにコピーした SDK の jar ファイルから必要な要素が自動的にインポートされます。この時点では、まだいくつかのエラーが表示されるかもしれませんが、手順を進めていくうちにエラーは解決されるはずです。

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

 
  1. IBM Mobile Data for Bluemix サービスを統合するには、Item クラスに 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 クラスの中で IBM Mobile Data for Bluemix サービスを利用して、クラウド内のデータの作成、読み取り、削除を行う

 
  1. IBM Mobile Data for Bluemix サービスから項目を読み取るために、listItems メソッドを実装します。これらの項目は、大文字と小文字を区別せずにアルファベット順でソートします。listItemsMainActivity クラスのメソッドとして作成します。

    リスティングを見るにはここをクリック

    public void listItems() {
    	try {
    		IBMQuery<Item> query = IBMQuery.queryForClass(Item.class);
    		// Query all the Item objects from the server
    		query.find().continueWith(new Continuation<List<Item>, Void>() {
    
    				@Override
    				public Void then(Task<List<Item>> task) throws Exception {
                        final List<Item> objects = task.getResult();
                         // Log if the find was cancelled.
                        if (task.isCancelled()){
                            Log.e(CLASS_NAME, "Exception : Task " + task.toString() + " was cancelled.");
                        }
    					 // Log error message, if the find task fails.
    					else if (task.isFaulted()) {
    						Log.e(CLASS_NAME, "Exception : " + task.getError().getMessage());
    					}
    
    					
    					 // If the result succeeds, load the list.
    					else {
                            // Clear local itemList.
                            // We'll be reordering and repopulating from DataService.
                            itemList.clear();
                            for(IBMDataObject item:objects) {
                                itemList.add((Item) item);
                            }
                            sortItems(itemList);
                            lvArrayAdapter.notifyDataSetChanged();
    					}
    					return null;
    				}
    			},Task.UI_THREAD_EXECUTOR);
    			
    		}  catch (IBMDataException error) {
    			Log.e(CLASS_NAME, "Exception : " + error.getMessage());
    		}
    	}
  2. onCreate メソッド内で ArrayAdapter を設定した後、listItems() を呼び出し、IBM Mobile Data for Bluemix サービスを利用して保管済みの項目をリストに取り込みます。
    itemsLV.setAdapter(lvArrayAdapter);
    
    /* Refresh the list. */
    listItems();
  3. 新規項目を IBMDataObject クラスのインスタンスを使用して作成するように createItem メソッドを変更します。このインスタンスに備わる Mobile Data の save() メソッドを呼び出し、continueWith() メソッドを使用して任意のエラーの処理や更新されたリストのロードを行います。

    リスティングを見るにはここをクリック

    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);
    		// Use the IBMDataObject to create and persist the Item object.
    		item.save().continueWith(new Continuation<IBMDataObject, Void>() {
    
    			@Override
    			public Void then(Task<IBMDataObject> task) throws Exception {
    				// Log if the save was cancelled.
    				if (task.isCancelled()){
    					Log.e(CLASS_NAME, "Exception : Task " + task.toString() + " was cancelled.");
    				}
    				 // Log error message, if the save task fails.
    				else if (task.isFaulted()) {
    					Log.e(CLASS_NAME, "Exception : " + task.getError().getMessage());
    				}
    
    				 // If the result succeeds, load the list.
    				else {
    					listItems();
    				}
    				return null;
    			}
    
    		});
    		
    		// Set text field back to empty after item is added.
    		itemToAdd.setText("");
    	}
    }
  4. deleteItem メソッドにいくつかの変更を加えることで、このメソッドが IBMDataObject クラスのインスタンスに備わる Mobile Data の delete() メソッドを呼び出すようにします。delete() メソッドが返す Bolts Task は、この作業が成功したか失敗したかをチェックするために使用されます。

    リスティングを見るにはここをクリック

    public void deleteItem(Item item) {
    	itemList.remove(listItemPosition);
    	
    	// This will attempt to delete the item on the server.
    	item.delete().continueWith(new Continuation<IBMDataObject, Void>() {
    
    		@Override
    		public Void then(Task<IBMDataObject> task) throws Exception {
    			// Log if the delete was cancelled.
    			if (task.isCancelled()){
    				Log.e(CLASS_NAME, "Exception : Task " + task.toString() + " was cancelled.");
    			}
    
    			 // Log error message, if the delete task fails.
    			else if (task.isFaulted()) {
    				Log.e(CLASS_NAME, "Exception : " + task.getError().getMessage());
    				}
    
    			 // If the result succeeds, reload the list.
    			else {
    				lvArrayAdapter.notifyDataSetChanged();
    			}
    			return null;
    		}
    	},Task.UI_THREAD_EXECUTOR);
    	
    	lvArrayAdapter.notifyDataSetChanged();
    }

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

 
  1. finishedEdit メソッドは、IBMDataObject クラスのインスタンスとして更新する必要があるインスタンスに備わる Mobile Data の save() メソッドを呼び出します。continueWith() メソッドを使用して実装することで、任意のエラーを処理できるようにします。
    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.save().continueWith(new Continuation<IBMDataObject, Void>() {
    
    		@Override
    		public Void then(Task<IBMDataObject> task) throws Exception {
    			if(task.isCancelled()) {
    				Log.e(CLASS_NAME, "Exception : " + task.toString() + " was cancelled.");
    			}
    
    			else if (task.isFaulted()) {
    				Log.e(CLASS_NAME, "Exception : " + task.getError().getMessage());
    			}
    			
    			else {
    				Intent returnIntent = new Intent();
    				setResult(BlueListApplication.EDIT_ACTIVITY_RC, returnIntent);
    				finish();
    			}
    			return null;
    		}
    		
    	},Task.UI_THREAD_EXECUTOR);
    
    }

ステップ 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 呼び出し、ストレージの使用量などが含まれています。 アナリティクス統計とそのグラフィック表現のスクリーン・ショット

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

まとめ

 

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


関連トピック:この連載の次回の記事 (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=IBM Mobile Data for Bluemix クラウド・サービスを利用して Android アプリを作成する
publish-date=10022014